0

私はコードにこの部分を持っています:

char* data="My name is: ";

argv[1]これに、名前を表す引数を追加したいと思います。これをCコードで行う方法は?私は試しましたがstrcpystrcatIpcpがこれを行うとセグメンテーション違反が発生します:

strcpy(data,argv[1]);

誰か助けてもらえますか?

また、なぜこれが:data=data+argv[1]機能していないのですか?

4

4 に答える 4

4

連結の結果を格納できるメモリを用意する必要があります。例えば:

char buffer[1024];

strcpy(buffer, "My name is: ");
strcat(buffer, argv[1]);

ただし、これはエラーが発生しやすいことに注意してください。argv[1]プレフィックス文字列と組み合わせたの値が1024文字より長い場合、バッファオーバーフローが発生します。だから、多分このようなもの:

char* prefix = "My name is: ";
int length = strlen(prefix) + strlen(argv[1]) + 1;
char* buffer = malloc(length);

if (!buffer) abort();
else 
{
    strcpy(buffer, prefix);
    strcat(buffer, argv[1]);

    /* Do something with buffer here. And don't
     * forget to free it, once you no longer need
     * it. This is C -- no garbage collection. */

    free(buffer);
}
于 2012-09-11T10:23:59.103 に答える
0

のメモリdataは読み取り専用セクションに割り当てられます。したがって、変更すると問題が発生します。

メモリ内のどこに文字列リテラルがありますか?スタック/ヒープ?

+演算子はあなたが思ったように連結を行いません。

strcat()関数はで実装されstring.hます。

于 2012-09-11T10:24:31.963 に答える
0

また、なぜこれが:data = data + argv [1]が機能していないのですか?

これについて-Cでは、dataとargvは、文字列を含むメモリ内のアドレスへのポインタにすぎません。この方法でstrings(char *)を連結することはできません。文字列ライブラリを見てみることをお勧めします。おそらく、C全体でもう少し見てみましょう。

于 2012-09-11T10:24:44.577 に答える
0

スペースがないため、データポインターに追加できません

char result_data [1024];
char* data="My name is: ";
strcat(result_data, data);
strcat(result_data, argv[1]);
于 2012-09-11T10:32:06.987 に答える