#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

 

www.shengrizhufuyu.cn