0
#include <stdio.h>
#include <string.h>

char* changeString(char *inputString);

int main() {
   printf("Changed string is %s\n", changeString("42"));
}

char* changeString(char *inputString) {
    static const char* someStrings[3] = {"abc", "def", "ghi"};
    char* output;
    strcat(output, someStrings[1]);
    return output;
}

char*を別のものに追加しようとしていますが、サイズがないためセグメンテーション違反が発生し続け、セグメンテーション違反を修正するように変更char*strcatましたが、間違ったタイプを返し、答えを.char*char* output;char output[100];printf

アドバイスをいただければ幸いです。

編集:上記の例は何の価値もないように思われることを知っています。使用しているロジックを示すために変更しました。

4

4 に答える 4

6

出力文字列にメモリが割り当てられていません。malloc() を使用してメモリを割り当ててから、strcat を試してください。

于 2012-11-03T18:52:54.607 に答える
1

メモリを動的に割り当てたり、呼び出し元に渡すことができる静的ストレージを保持したりできます (ただし、気になる場合は、プログラムはスレッドセーフになりません)。

   static char output[100];
于 2012-11-03T18:55:29.597 に答える
1

変数outputは何も指しておらず、未定義の値を持っています。表示されるエラーは、不明なアドレスに書き込もうとしているために発生します。

最初に、出力文字列にメモリを割り当てる必要があります。

于 2012-11-03T18:57:09.750 に答える
0

未割り当てのメモリに情報を書き込んでいます。を使用mallocしてメモリを割り当て、次に使用strncatして範囲外にならないようにします。

char* output;
output = (char *)malloc(100*sizeof(char));
output[0] = '\0';
strncat(output, someStrings[1], 100);

次に、output結果の処理が完了したら、 を呼び出しfree()てメモリをシステムに戻します。気をつけてください、あなたはここで複雑な問題に踏み込んでいます。動的メモリ割り当てを軽視しないでください。

詳細については、マンページを参照してください。またはこれ: http://en.wikipedia.org/wiki/C_dynamic_memory_allocation

于 2012-11-03T18:55:07.133 に答える