質問

私は問題は次のコード:

for(i = 0;(i - 1)< n;i++)
{
char* b;
sprintf(b, "%d", i);
}

で統美がんでいきたいと思ってい悪名高い"0XC0000005アクセス違反"が発生します。この設定をNULL,"","0",0々ソフトバンクグループはその他のものその0XC0000005アクセス違反エラーまたは"表現string!= NULLになります。他の助けがをお願いいたします。

役に立ちましたか?

解決

sprintfは、既存のバッファーにデータを書き込みます。このバッファーに最初のパラメーターとして渡します。現在、bの値をまったく指定していません。つまり、(CのIIRC)値は何でもかまいません。 NULLまたは0に設定すると、<=>はアドレス0から始まるメモリへの書き込みを試みます。

sprintfが書き込むことができるように、適切なサイズのバッファーを作成する必要があります。例:

for(i = 0;(i - 1)< n;i++)
{
    char b[10];
    sprintf(b, "%d", i);
}

それが実際に どのようにバッファを割り当てるかは、実際のコードが結果をどう処理するかによって異なります。

他のヒント

Umm ... bを初期化していないか、スペースを割り当てていないため、bへのポインタにゴミが含まれています。 Springtfでは、宛先バッファスペースを割り当てる必要があります...

少なくとも、char *だけでなく、char b [50]または予想される最大サイズのようなものが必要です。

char *は、charまたはchar配列への初期化されていないポインターです。バッファchar [10]を定義する必要があります。そうしないと、sprintfのターゲットアドレスが未定義になります。

sprintfが必要で、既に割り当て文字をバッファに十分な大き店舗できます。この高い対象のバッファがオーバーフローする-ほとんど使用したいのですが、より安全なsnprintfです。一つ非効率で安全な方法が確立されてきてい:

int bufsize = snprintf(NULL, 0, formatstring, ...);
char *buffer = malloc(bufsize+1); # count doesn't include trailing nul
if (buffer == NULL) out_of_memory_error();
snprintf(buffer, bufsize+1, formatstring, ...);

どうもありがとう! char *が必要だったため、コードを次のように書き直しました。

for(i = 0;(i - 1)< n;i++)
{
char* b;
char a[100];
b = a;
sprintf(b, "%d", i);
}

そしてそれは魅力のように機能します。私はついに私の人生を続けることができます!もう一度ありがとうございました!

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top