2011-06-20 70 views
2

這是我的代碼爲什麼我在串接字符串時變得垃圾字符?

char *c[strlen(a) + strlen(b) + 2]; 
    strcat(c, a); 
    strcat(c, "+"); 
    strcat(c, b); 

結果字符串c具有在開始的時候有些垃圾字符,接着是連接字符串。我做錯了什麼?

+0

你有兩個問題,答案爲止各自管理,以確定只有一個。 (讓我希望我完成了鍵入我的答案,同時擊中兩個!) –

回答

2
char c[strlen(a) + strlen(b) + 2]; 
snprintf(c, sizeof(c), "%s+%s", a, b); 
5

它應該是:

char *c = malloc (sizeof (char) * (strlen (a) + strlen (b) + 2)); 
c[0] = '\0'; 
strcat(c, a); 
strcat(c, "+"); 
strcat(c, b); 

你的日常失敗的原因是因爲你做:

char *c[strlen(a) + strlen (b) + 2]; 

其聲明c作爲指針數組,也沒有初始化陣列與'\0'。它應該像

char c[strlen(a) + strlen (b) + 2]; 

您還可以在陣列與一個空字符串初始化,爲strcat會發現'\0'在串聯的時間。

請注意,char *c[strlen(a) + strlen (b) + 2];中的錯誤執行沒有問題,因爲每個位置的長度都是4個字節,所以數組可以容納其中的字符。但這是不正確的。

+2

正確的聲明,但第一個strcat仍然有問題。 –

+0

這可能不是downvote值得的,但這並沒有得到這裏的問題的核心。這只是分配內存堆的字符串,而不是像他/他想要的堆棧。 –

+0

@Arthur,同意在啓動strcat前做一個memset();或者可以做一個snprintf()。 – Suroot

4

如果您還沒有初始化c[0] = '\0';,strcat會先找到'\0',然後再插入c

+0

正確使用strcat,但變量聲明仍然存在問題。 –

+0

@阿瑟,沒錯。 –

0

你的垃圾字符來自c,你正在定義c,但是它對一些垃圾值很有用,因爲你還沒有初始化它們,把c的第一個字符賦值爲null,我認爲應該修復你的問題。

1

你正在聲明一個char指針數組(char *)。需要聲明的char數組:

char c[strlen(a) + strlen(b) + 2]; 
strcat(c, a); 
strcat(c, "+"); 
strcat(c, b);