#include<stdio.h>
int main()
{
char s;
char a = 'a';
scanf("%s",&s);
printf("input word is:%s, %c\n",&s, a);
return 0;
}
输入123 , 结果如下:

发现a 的值居然打印为2了!
如果把上面代码中的printf("%s,"); 改为 printf("%c,");
输入nsb,发现char s 的打印异常 , a 仍为 输入的第二个字符 而不是' a '

当然,如果scanf(“%c”)时当然不会出现这些问题,这里只是讨论用scanf(“%s”)输入char数据的情况
在以上的例子中,
先定义了一个char s; // sizeof(char)== 1
又定义了一个char a = ' a '; // a的内存地址紧挨着 s ,如下

当然,打印地址应该用printf(“%p”),不过意思都一样啦,内存地址都是差一位的
#include<stdio.h>
int main()
{
char s;
printf("%d\n",&s);
char a = 'a';
// 只要加上这行printf()语句,输出就又正常了
printf("%d\n",&a);
scanf("%s",&s);
printf("input word is:%s, %c\n",&s, a);
return 0;
}

真是让人奇怪哈?我觉得也是编译器的原因,资料如下:

https://blog.csdn.net/ljx_5489464/article/details/50839801
本文探讨了使用C语言scanf函数输入单个字符时遇到的异常现象,特别是在使用%s格式符时,字符变量与字符串变量之间的内存冲突导致的错误打印结果。通过修改代码顺序和格式符,解决了这一问题。
2097

被折叠的 条评论
为什么被折叠?



