2013-03-17 26 views
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; 
} 

我會很感激,如果任何人能幫助我,爲什麼它就像這個數字出來,我該如何糾正呢?

回答

5

strncpy如果大小太小,則不會添加nul終結符。

試試這個:

strncpy(name, name1, 2); 
name[2] = '\0'; 
+1

+1它總是*寫*'N'個字符,其中N是第三個參數。如果源字符串比N字符小,它將用空字符尾部填充到N。 (當然,只要實現符合標準)。 – WhozCraig 2013-03-17 07:05:55

+0

這就是答案,非常感謝 – eded 2013-03-17 07:48:27

+0

請記住,相同的規則也適用於fgets()和類似的函數。 – none 2013-03-17 08:52:54