整数を表すcharを使用してchar*を作成しようとしています。だから私はこれまでにこれを持っています
int x;
for(x=0;x<12;x++){
cp->name=strcat(tp->name, (char *)x);
}
名前はchar*です。問題はx部分です。セグメンテーション違反が発生しましたが、xの内容のアドレスにアクセスできず、charとしてキャストできないためだと思います*
これに関するヒントはありますか?
ありがとう
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);
}
xの数値を明示的に文字列 (= の配列)に変換する必要がありますchars。単なる型キャストではこれを行うことはできません。
を使用するsprintf()のがおそらく最も簡単な方法です。
int x;
for (x = 0; x < 12; x++)
sprintf(tp->name + strlen(tp->name), "%d", x);
言うまでもなく、tp->name十分なスペースが必要であり'\0'、上記を実行する前に終了する必要があります。
sprintf(str,"%d",x)C では、 ;を使用できます。または C++ stringstream でstd::ostringstream oss; oss << tp->name << x;。非標準関数を使用することに問題がなければ、非標準のitoa()関数を使用することもできます。