fprintf 打印奇怪的整数

fprintf prints strange integers

我希望下面的代码生成一个名为 stackexchangeiscool.txt 的文件并写入

Hello!
I changed my mind: 17291729

但事实并非如此。它生成一个名为 stackexchangeiscool.txt 的文件,其中包含文本

Hello!
I changed my mind: 17293748407

这段代码肯定没有意义;它是我遇到奇怪问题的较大代码的一部分。

#include <stdlib.h>
#include <stdio.h>

int main(void)
{
    FILE * file = NULL;
    
    file = fopen("stackexchangeiscool.txt","w");
    
    int n = 1729;   
    
    char myFirstString[] = "This is a string.";
    
    fprintf(file, "Hello!\n");
    
    sprintf(myFirstString, "I changed my mind: %d", n);
    
    fprintf(file, "%s", myFirstString);
    fprintf(file, "%d", n);

    fclose(file);
    
    return(0);
}

编辑:下面的评论表明问题可能来自 myFirstString 太短而无法包含其中包含整数的新字符串。但是,当我删除

fprintf(file, "%d", n);

我明白了

Hello!
I changed my mind: 1729

所以 myFirstString 似乎可以包含字符串和整数。

问题是,myFirstString 只有足够的空间容纳 18 个字符,但您正试图复制 ~23 个字符。这意味着您正在注销数组的末尾。我认为正在发生的事情是 n 直接存储在 myFirstString 之后的内存中,并且通过注销数组的末尾,您正在“破坏” n.

提前确保数组足够大,以便所有内容都可以容纳:

char myFirstString[100] = "This is a string.";

在这里,我将其设为任意大的 100 长度。您可以像这样将其设置为任意 fixed-length,或者计算您需要的长度并 malloc。无论哪种方式,您都需要确保在尝试复制数据之前有足够的内存可以使用。