2

文字列の最後に「$」を追加したいのですが、使用できることを確認し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);

4

4 に答える 4

8

問題は、リテラル文字列に連結しようとしていることです。リテラル文字列は一定であり、変更できません。

代わりに、連結に適合するのに十分な文字を含む配列として「宛先」を作成する必要があります。

char word[16] = "1000";

上記の配列の16という数字は任意に選びました。少なくとも、入力する文字列、連結する文字列の長さ、および終了'\0'文字を収めるのに十分な大きさである必要があります。

于 2013-03-09T20:12:03.940 に答える
5

エラーはどこにありますか?

エラーはどこにあるのですか?

1つ目は、文字列リテラルが読み取り専用であるということです。strcat()のような文字列定数だけを使用することはできません"1000"

2つ目は、最後にドル記号を表示するための十分なスペースがないことです。必要なのはこれです:

// 6 characters: '1', '0', '0', '0', '$' and the terminating NUL
char word[6] = "1000";
strcat(word, "$");
于 2013-03-09T20:12:58.080 に答える
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);
于 2013-03-09T20:17:43.240 に答える
0

文字の配列にします。

char example[100];
strcat (example,"$");
于 2013-03-09T20:18:05.097 に答える