#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