0

プログラムがクラッシュするときprintf("%s/%s\n", str1, str2);に文字列を出力するときに見落とした可能性のある簡単なことはありますか?sprintf(str3, "%s/%s", str1, str2);

これは、VirtualBox で実行している Ubuntu (最新リリース) でのみ発生します。Windows (ホスト) では、両方の行が問題なく実行されます。

さらにコンテキストが必要な場合は、教えてください。私が見逃したばかげたことがあることを願っており、これらの2行で十分です。

4

1 に答える 1

6

違いは、printf()標準出力へsprintf()の書き込みとバッファへの書き込みstr3です。が結果の文字列を格納するのに十分な大きさでない場合str3、それは未定義の動作であり、クラッシュの原因となる可能性があります。

str3正しく初期化されている (NULLまたは初期化されていない) 必要があり、文字を保持するのに十分なスペースを指している必要がありますstrlen(str1) + strlen(str2) + 2。は+ 2/あり、終端のヌル文字です。例えば:

char* str3 = malloc(strlen(str1) + strlen(str2) + 2);
if (str3)
{
    sprintf(str3, "%s/%s", str1, str2);
}
于 2012-09-18T21:09:19.323 に答える