如何解决fprintf打印奇怪的整数
我希望下面的代码产生一个名为stackexchangeiscool.txt的文件并写入
.*
但事实并非如此。它会产生一个名为stackexchangeiscool.txt的文件,其中包含文本
Hello!
I changed my mind: 17291729
此代码肯定没有任何意义;它是我遇到奇怪问题的较大代码的一部分。
Hello!
I changed my mind: 17293748407
编辑:下面的注释表明问题可能是由于myFirstString太短而无法包含其中包含整数的新字符串。但是,当我删除
#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);
}
我明白了
fprintf(file,n);
所以myFirstString似乎可以包含字符串和整数。
解决方法
问题在于,myFirstString
仅具有足够的空间来容纳18个字符,但是您正在尝试复制约23个字符。这意味着您要注销数组的末尾。我认为正在发生的情况是n
直接存储在myFirstString
之后的内存中,并且通过注销数组的末尾,您正在“遍地开花” n
。
确保数组足够大,以便所有内容都可以容纳:
char myFirstString[100] = "This is a string.";
在这里,我将其设置为任意大的100
长度。您可以像这样将其设置为任意固定长度,或者计算所需的长度并malloc
。无论哪种方式,您都需要在尝试复制数据之前确保有足够的内存来处理。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。