char *a; scanf("%s",a); printf("%s",a); 这样行么?

作者&投稿:妫司 (若有异议请与网页底部的电邮联系)
为什么char *a; scnaf(“%s”,a); 错 char *a,str[10]; a=str; scanf (“%s”,a); 对~

char *a; scnaf(“%s”,a);
这个不是语法问题,a还是个野指针,它指向的区域是未知的,所以scanf("%s",a);是不可靠的

输出:ABCD
ABCD是字符常量,末尾有"\0"作为终止符.而以%s的格式化输出,当遇到"\0"时,停止输出.而指针a指向的是字符的首地址,即从A开始,遇到"\0"停止输出.所以结果为ABCD.

不行,a没有初始化,也没有分配足够的空间,scanf会把a指针所指内存开始的一段空间都修改,可能那段内存是不允许读写的,造成程序错误或崩溃。改成:

char a[100];
scanf("%s",a);

或者

char *a;
a = (char*)malloc(100);
scanf("%s",a);

就可以往a中写入不超过100个字符了。



不行,指针a没有初始化

改成

char *a;
a = malloc(sizeof(char));
scanf("%c",a);
printf("%c",a);