2015-05-30 39 views
-2

我是C語言的新手。我想使用的strcat,在下面的示例:strcat函數如何使用

char s1[20] = "Happy "; 
    char s2[15] = "world"; 
    char s3[40] = ""; 
    strcat(s3,s1); 

雖然,我想練了一下指針我剛纔看到的,所以:

char *s1 = "Happy"; 
char *s2 = "World"; 

strcat(*s2,*s1); 

生產型「炭」的說法與類型「爲const char *的參數是不相容的。同樣,這可能是容易的,但要作爲澄清儘可能

回答

1

在第二個例子中,

strcat(*s2,*s1); 

有一個類型不匹配的問題,因爲*s2*s1的類型char。如果你使用:

strcat(s2,s1); 

它仍然是錯誤的,因爲s2指向一個字符串文字,無法進行修改。

+0

等待..爲什麼s2無法修改? – iol

+0

@iol修改一個**字符串**是未定義的行爲。 –

+0

這取決於如何聲明's2'。如果它是一個字符串,就像在第二個示例中一樣,那麼是的,它不能被修改。但是,如果它是像第一個示例一樣放置在堆棧上的字符數組,則可以根據需要對其進行編輯。 – user35443

0
strcat(*s2, *s1); 

嘗試連接兩個8位的字符,而不是兩個字符串,這是實用不可能。 Strcat需要兩個指向字符串的指針。它所做的是找到第一個字符串的結尾,並開始逐個字符地移動第二個字符,結果是一個更長的字符串。

它被聲明爲

char * strcat (char * destination, const char * source); 

,因此

char s1[20] = "Hello "; 
char s2[40] = "World!"; 
strcat(s2, s1); 

是要走的路,因爲這兩個s2s1是指針。

但是,如果你真的想用三分球玩,你可以使用

char* strs[2]; 
strs[0] = "Hello "; 
strs[1] = "World!"; 

char res[20]; 
strcat(res, *strs); 
strcat(res, strs[1]); 
+0

我試過,但我得到訪問衝突寫入位置0x0118CC78, – iol

+0

@iol哪一個?我可能犯了一個錯誤。另外,我做了一個小修改,看看。 – user35443

+0

確定這個工程,如果你初始化char res [20] =「」。雖然我想要做的是strcat(strs [0],strs [1])這似乎不工作 – iol

0

爲什麼你有困難的原因,是因爲你在的s2s1前使用*解引用在s2s1的第一個字符。這是爲什麼。

儘管字符數組與指向一個或多個字符的指針不完全一樣,但以數組名s1爲例,它被視爲指向數組s中第一個字符的指針,它是'H'。使用名稱s2指向s2中的第一個字符,即'w'。因此,如果投入的s2s1,結果前方的星號中,分別讀出第一字符中的每個這些陣列。

所以,正如在另一個答案已經指出的那樣,你試圖連接兩個8位字符,而不是串聯一個串到另一個結束。