這是我的代碼爲什麼我在串接字符串時變得垃圾字符?
char *c[strlen(a) + strlen(b) + 2];
strcat(c, a);
strcat(c, "+");
strcat(c, b);
結果字符串c具有在開始的時候有些垃圾字符,接着是連接字符串。我做錯了什麼?
這是我的代碼爲什麼我在串接字符串時變得垃圾字符?
char *c[strlen(a) + strlen(b) + 2];
strcat(c, a);
strcat(c, "+");
strcat(c, b);
結果字符串c具有在開始的時候有些垃圾字符,接着是連接字符串。我做錯了什麼?
char c[strlen(a) + strlen(b) + 2];
snprintf(c, sizeof(c), "%s+%s", a, b);
它應該是:
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個字節,所以數組可以容納其中的字符。但這是不正確的。
正確的聲明,但第一個strcat仍然有問題。 –
這可能不是downvote值得的,但這並沒有得到這裏的問題的核心。這只是分配內存堆的字符串,而不是像他/他想要的堆棧。 –
@Arthur,同意在啓動strcat前做一個memset();或者可以做一個snprintf()。 – Suroot
如果您還沒有初始化c[0] = '\0';
,strcat
會先找到'\0'
,然後再插入c
。
正確使用strcat,但變量聲明仍然存在問題。 –
@阿瑟,沒錯。 –
你的垃圾字符來自c,你正在定義c,但是它對一些垃圾值很有用,因爲你還沒有初始化它們,把c的第一個字符賦值爲null,我認爲應該修復你的問題。
你正在聲明一個char指針數組(char *
)。需要聲明的char
數組:
char c[strlen(a) + strlen(b) + 2];
strcat(c, a);
strcat(c, "+");
strcat(c, b);
你有兩個問題,答案爲止各自管理,以確定只有一個。 (讓我希望我完成了鍵入我的答案,同時擊中兩個!) –