1. 程式人生 > >c語言一個字元變數儲存多個字元

c語言一個字元變數儲存多個字元

#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