0
#include "stdio.h"

int main (void) {
    char xx[1000] = "hello";
    sprintf (xx, "xyzzy plugh %s", xx);
    printf ("%s\n", xx);
    return 0;
}

::::(エラー) 未定義の動作: sprintf または snprintf の呼び出しで xx が間違って使用されています。引用: sprintf() または snprintf() の呼び出しの結果、重複するオブジェクト間でコピーが行われた場合、結果は未定義です。

4

2 に答える 2

1

char配列xxに書き込み、コピーのソースとして使用しています。この動作は未定義です。状況に関する既存の質問は次のとおりです。

sprintf(buffer、 "%s […]"、buffer、[…])は安全ですか?

于 2011-03-08T13:06:06.297 に答える
1

まさにそれが言うこと。入力と出力の両方で同じ配列を sprintf() に渡しています。これは、sprintf が出力文字列を昇順で書き込むという保証がないため、サポートされている使用法ではありません。

于 2011-03-08T12:36:50.790 に答える