整数を表す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
」と伝えます。
x
0 から 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()関数を使用することもできます。