2015-03-13 53 views
-3

我有一個函數取兩個字符串string_onestring_two都是一個指向字符的指針。這是一個有效的方式來在C中添加兩個字符串?

我想了個辦法,將其添加在一起:

while (*string_one){ 
    string_one++; 
    } 
    *string_one = *string_two; 

,但我不能看到在輸出第二串!

如何添加兩個字符串?我接近了嗎?

回答

6

當你寫

*string_one = *string_two; 

你只是複製一個角色,因爲你是去引用一個字符指針

兩個字符串添加到彼此,你需要覆蓋的第一\ 0字符串,然後附加第二個字符串中的字符(前提是您有足夠的空間可以這麼做)。

所以這

while (*string_one) { 
    string_one++; 
} 
*string_one = *string_two; 

將只從STRING_TWO的第一個字符,這將導致所述第一串中不會空終止不再覆蓋\ 0。

,而不是你應該這樣的前提是STRING_ONE原來指向字符串大到足以容納兩個字符串再次做同樣的事情像

while (*string_one) { 
    string_one++; 
} 
while (*string_two) { 
    *string_one++ = *string_two++; 
} 
*string_one = '\0'; 

一次。

+0

謝謝兄弟!這幫助了很多 – BRHSM 2015-03-13 09:28:53

1

恐怕你的代碼無效。

*string_one = *string_two; 

將的string_two第一元件複製到string_one。這從來沒有增加什麼。而且,您需要附加完整字符串,不僅僅是一個元素。

你需要的是strcat()。你可以在here找到更多。

的一般描述:

strcat()功能追加src字符串到dest串,覆蓋在dest末端終止空字節(\0),然後添加終止空字節。字符串可能不重疊,並且dest字符串必須有足夠的空間用於結果。如果dest不夠大,程序行爲是不可預知的。

2

你是否試過你的代碼?

首先,您需要確保兩個字符串都有足夠的空間。連接字符串而不檢查是否有足夠的空間可能是世界上所有黑客電腦中50%的原因。

其次,一個C字符串是一個char數組,其中一個零字節作爲最後一個字符。您的代碼用string_two的第一個字符覆蓋string_one末尾的零字節。

第三,在標準C庫中有一個名爲strcat的函數正在執行你想要做的事情。它不檢查是否有足夠的空間,你必須在通話之前這樣做。

相關問題