C中的sprintf,循环永不结束

use*_*282 5 c printf

我有循环问题,我不知道为什么但循环永远不会结束.

int main(int argc, char *argv[])
{
    int j;
    char s[2];
    for(j=1;j<=3;j++)
    {
        sprintf(s,"s%d",j);
        printf("%s", s);
    }
    system("PAUSE");    
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我认为循环应该在控制台中显示s1s2s3.

小智 8

char s[2];应该是char s[3];,否则你会得到一个缓冲区溢出.


Abhineet解释了为什么改变是必要的.但是,为了证实他的答案,这里是标准的相关部分.

7.19.6.6

sprintf函数等效于fprintf,除了输出被写入数组(由参数s指定)而不是流.在写入的字符末尾写入空字符 ; 它不计入返回值的一部分.如果在重叠的对象之间进行复制,则行为未定义.