-1

コード:

void w(char* c, int i)
{
    char * t;
    sprintf(t, "%d", i);
    perror(c);
    perror(t);
}

int main(void)
{
    w("qwe", 5);
    return 0;
}

セグメンテーション違反を引き起こしますが、

int main(void)
{
    perror("qwdasda");
    w("qwe", 5);
}

動作します。なんで?私の質問はあなたの品質基準を満たしていません。

4

2 に答える 2

3

セグメンテーション違反は次のとおりです。

char *t;
sprintf(t,"%d",i);

このコードでtは、 は に入力されsprintf()ます。ただし、初期化されtていないためsprintf()、メモリに落書きされます。を使用することはほとんどお勧めできません。代わりに以下をsprintf()使用してください。snprintf()

char buf[32];
snprintf(buf, sizeof(buf), "%d", i);
于 2012-12-23T06:12:42.573 に答える
2

特にストレージを指すように初期化されていないため、sprintf()呼び出しはランダムなメモリを踏みにじっています。tそれがおそらくクラッシュしているものです。

于 2012-12-23T06:12:15.450 に答える