本文共 743 字,大约阅读时间需要 2 分钟。
#includeint 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”),不过意思都一样啦,内存地址都是差一位的
#includeint 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;}
真是让人奇怪哈?我觉得也是编译器的原因,资料如下:
转载地址:http://hzgxi.baihongyu.com/