0
#include "stdio.h"

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

::::(error) 未定义的行为:xx 在调用 sprintf 或 snprintf 时使用错误。Quote: 如果由于调用 sprintf() 或 snprintf() 而在重叠的对象之间发生复制,则结果未定义。

4

2 回答 2

1

正是它所说的。您将相同的数组作为输入和输出传递给 sprintf(),这是不支持的用法,因为无法保证 sprintf 会按升序写入输出字符串。

于 2011-03-08T12:36:50.790 回答
1

您正在写入 char 数组 xx 并将其用作副本的源。此行为未定义。这是一个关于这种情况的现有问题:

sprintf(buffer, "%s [...]", buffer, [...]) 安全吗?

于 2011-03-08T13:06:06.297 回答