为什么以下程序在使用cppcheck analyzer检查时会出错

#include "stdio.h"

int main (void) {
    char xx[1000] = "hello";
    sprintf (xx, "xyzzy plugh %s", xx);
    printf ("%sn", xx);
    return 0;
}
::: :(错误)未定义的行为:在调用sprintf或snprintf时错误地使用了xx。 Quote:如果由于调用sprintf()或snprintf()而重叠的对象之间发生复制,则结果是未定义的。     
已邀请:
正是它所说的。您将相同的数组作为输入和输出传递给sprintf(),这不是受支持的用法,因为无法保证sprintf将按升序写入输出字符串。     
您正在写入char数组xx以及将其用作副本的源。此行为未定义。这是关于这种情况的现有问题: sprintf(缓冲区,“%s [...]”,缓冲区,[...])是否安全?     

要回复问题请先登录注册