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
。无论哪种方式,您都需要确保在尝试复制数据之前有足够的内存可以使用。
我希望下面的代码生成一个名为 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
。无论哪种方式,您都需要确保在尝试复制数据之前有足够的内存可以使用。