建议我在编译期间何时会出现以下警告

temp ....在调用sprintf或snprintf时使用错误。 如果由于调用sprintf()或snprintf()而重叠的对象之间发生复制,则结果是未定义的。     
已邀请:
即使用
-Wall -Wextra -pedantic
,这也不会引起gcc的警告:
#include "stdio.h"

int main (void) {
    char xx[1000] = "hello";
    sprintf (xx, "xyzzy plugh %s", xx);
    printf ("%sn", xx);
    return 0;
}
但是,从输出中可以看出这被认为是一个坏主意的原因。而不是得到:
xyzzy plugh hello
正如一个普通人可能期望的那样,你实际得到:
xyzzy plugh xyzzy plugh
但是,与所有未定义的行为一样,您的里程可能会有所不同。 最终参考文献是C99标准,第4节,其中规定:   sprintf函数等效于fprintf,除了输出被写入数组(由参数s指定)而不是流。在写入的字符末尾写入空字符;它不计入返回值的一部分。如果在重叠的对象之间进行复制,则行为未定义。 C ++标准(嗯,实际上是C ++ 0x草案,但它肯定会在任何一天到期,希望 - 来吧,伙计们,把它拿出来)引用它,因为它将C标准的一部分作为已弃用的功能。     

要回复问题请先登录注册