聲明一個字符串我要聲明一個字符串,將舉行4個字符奇怪的值,當我用C
char st[4];
memcpy(st,"test",4);
,但是當我打印ST ...我有「測試」,並在其後的印刷一些其他符號 - 那有什麼不對?
非常感謝
聲明一個字符串我要聲明一個字符串,將舉行4個字符奇怪的值,當我用C
char st[4];
memcpy(st,"test",4);
,但是當我打印ST ...我有「測試」,並在其後的印刷一些其他符號 - 那有什麼不對?
非常感謝
C字符串,如"test"
字符串常量,是NULL結尾的,這意味着最後一個字符是 '\ 0':
{'t', 'e', 's', 't', '\0'}
您將需要使用st[5]
,和複製5個字符,爲NUL留出空間(包括)。因爲你沒有將它包含在副本中。所以aftewards,st
樣子:
{'t', 'e', 's', 't', X, X, X ... '\0'}
打印時,C一直是不約而同地在內存中(上述X'es),直到找到一個NUL閱讀的亂碼值。
最好的解決辦法是消除memcpy
,並讓您的初始化編譯器弄清楚大小:
char st[] = "test";
sizeof(st)
現在是5
如果你真的想使用memcpy()
,你還必須複製終止空字節:
char st[5];
memcpy(st, "test", 5);
記住,在內存中"test"
看起來像這樣:
74 65 73 74 00
t e s t \0
這就是爲什麼你必須複製5個字節。
如果不復制空字節,即對空工作職能終止字符串,如printf()
,會讀取內存,直到他們達到一定的隨機空字節...
如果出於某種奇怪的原因要保持你的代碼是,請執行下列操作:
char st[4];
memcpy(st,"test",4);
int i;
for(i = 0; i < 4; i++)
printf("%c",st[i]);
現在它將會打印OK的。但閱讀其他答案,看看你的編程是不正確的。