2
我寫了一個簡單的c程序,它只取一個單詞的前兩個字符並取第二個單詞的最後三個字符。我使用strncpy僅將name1的前2個字母複製到名稱,並與name2中的最後三個字符連接。strncpy append 1 extra(怪異或隨機)char
但是,當我運行它。輸出會莫名其妙像
Ediacy //correct
acy //wrong
Ed?
acy //wrong
Edk
acy //wrong
Edv
acy //wrong
// code sample
#include <stdio.h>
#include <string.h>
int main(void)
{
char name[100];
char name1[] = "Edison";
char *name2 = "Tracy";
strncpy(name, name1, 2); // instead of get Ed, it tried to append one extra char behind it.
strcat(name, name2+2);
printf("%s\n", name);
return 0;
}
我會很感激,如果任何人能幫助我,爲什麼它就像這個數字出來,我該如何糾正呢?
+1它總是*寫*'N'個字符,其中N是第三個參數。如果源字符串比N字符小,它將用空字符尾部填充到N。 (當然,只要實現符合標準)。 – WhozCraig 2013-03-17 07:05:55
這就是答案,非常感謝 – eded 2013-03-17 07:48:27
請記住,相同的規則也適用於fgets()和類似的函數。 – none 2013-03-17 08:52:54