c語言一個字元變數儲存多個字元
阿新 • • 發佈:2019-01-13
#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; }
真是讓人奇怪哈?我覺得也是編譯器的原因,資料如下: