1

整数を表すcharを使用してchar*を作成しようとしています。だから私はこれまでにこれを持っています

int x;
for(x=0;x<12;x++){
    cp->name=strcat(tp->name, (char *)x);
}

名前はchar*です。問題はx部分です。セグメンテーション違反が発生しましたが、xの内容のアドレスにアクセスできず、charとしてキャストできないためだと思います*

これに関するヒントはありますか?

ありがとう

4

3 に答える 3

3

a にキャストxすることchar *で、コンパイラに「自分が何をしているのかわかっている。xアドレスとして扱い、それをに渡しますstrcat」と伝えます。

x0 から 12 までの整数が含まれているためstrcat、その番号のアドレスにある char 配列にアクセスしようとしています。メモリ内のそのアドレスはおそらくあなたのものではないため、segfault が発生しています。

整数の文字列表現を取得するには、sprintfまたはが必要です。snprintf

例えば:

int x;
for(x=0;x<12;x++){
    char buffer[16];
    snprintf(buffer, sizeof(buffer), "%d", x);
    cp->name=strcat(tp->name, buffer);
}
于 2012-10-22T02:17:29.497 に答える
0

xの数値を明示的に文字列 (= の配列)に変換する必要がありますchars。単なる型キャストではこれを行うことはできません。

を使用するsprintf()のがおそらく最も簡単な方法です。

int x;
for (x = 0; x < 12; x++)
    sprintf(tp->name + strlen(tp->name), "%d", x);

言うまでもなく、tp->name十分なスペースが必要であり'\0'、上記を実行する前に終了する必要があります。

于 2012-10-22T02:17:06.233 に答える
0

sprintf(str,"%d",x)C では、 ;を使用できます。または C++ stringstream でstd::ostringstream oss; oss << tp->name << x;。非標準関数を使用することに問題がなければ、非標準のitoa()関数を使用することもできます。

于 2012-10-22T02:17:10.590 に答える