2013-03-09 77 views
1

我想「$」添加到字符串結束的時候,我已經看到了,我可以使用strcat()和我寫了下面的代碼:段錯誤使用strcat的(小例子)

char *word = "1000"; 
const char *dollar = "$"; 
strcat(word,dollar); 
printf("%s", word); 

它編譯,但是當我運行這個小程序時,我得到Segmentation fault (core dumped)。 錯誤在哪裏?

我知道,strcat的是: char *strcat(char *dest, const char *src);

+1

@ H2CO3但如果我不明白我有權限問,那麼? – DarkCoffee 2013-03-09 20:15:04

+2

@ H2CO3你怎麼知道我沒有谷歌它? – DarkCoffee 2013-03-09 20:18:16

+0

使用邏輯和經驗的扣除。 – 2013-03-09 20:21:03

回答

5

錯誤在哪裏?

你的意思是哪裏錯誤,對不對?

第一個是字符串文字是隻讀的。你不能只將strcat()加到像"1000"這樣的字符串常量上。

第二個是你在最後沒有足夠的空間容納美元符號。你需要的是這樣的:

// 6 characters: '1', '0', '0', '0', '$' and the terminating NUL 
char word[6] = "1000"; 
strcat(word, "$"); 
8

的問題是,您要串聯到一個字符串。文字串是恆定的,不能改變。

您需要創建「目標」作爲一個數組,那麼包含的字符足以滿足您的連接:

char word[16] = "1000"; 

數16陣列上面我挑隨心所欲。它必須至少足夠大以適合放入它的字符串,再加上串聯的字符串的長度,再加上終止的字符'\0'

+0

所以,我不能使用char *作爲目的地,對吧?我必須使用陣列嗎? – DarkCoffee 2013-03-09 20:23:47

+0

@DarkCoffee這不是重點 - 將char *聲明爲一個指針並不奇怪地使底層內存可寫,它仍然是const char *(更確切地說,是const char [])。如果你使用了'-Wall'編譯器標誌,你會得到一個警告。 – 2013-03-09 20:32:34

+0

@ H2CO3如果char *作爲函數參數,是否必須將其轉換爲數組? – DarkCoffee 2013-03-09 20:49:46

0

如果我沒看錯這應該工作:

char word[255] = "1000"; //Creating an array with 255 elements 
const char dollar = '$'; //dollar is a single constant character '$' 
word[4] = dollar; //the fourth element of the array, right after the 1000, becomes $ 

printf("%s", word); 
0

使字符數組。

char example[100]; 
strcat (example,"$");