C++ 写入文件时出现分段错误
更新的代码功能齐全*** 我是C/C++新手,我编写了一段代码,通过每次向文件写入“count”来计算程序运行的次数。但当我试着运行它时,我得到了一个seg错误。谁能告诉我为什么C++ 写入文件时出现分段错误,c++,segmentation-fault,file-writing,C++,Segmentation Fault,File Writing,更新的代码功能齐全*** 我是C/C++新手,我编写了一段代码,通过每次向文件写入“count”来计算程序运行的次数。但当我试着运行它时,我得到了一个seg错误。谁能告诉我为什么 #include <stdlib.h> #include <stdio.h> int main(int argc, const char * argv[]) { FILE *fp; printf("LINE 13 CLEAR"); fp = fopen("MyPlayg
#include <stdlib.h>
#include <stdio.h>
int main(int argc, const char * argv[]) {
FILE *fp;
printf("LINE 13 CLEAR");
fp = fopen("MyPlayground.rtf", "r");
int value;
fscanf(fp, "%d", &value);
printf("Value is %d", value);
//printf("LINE 14 CLEAR");
if(fp== NULL)
{
printf("LINE 17 CLEAR");
if(fopen("MyPlayground.rtf", "w")==NULL)
{
exit(0);
}
//fprintf(fp,"%d",0);
fclose(fp);
return 0;
}
//printf("LINE 25 CLEAR");
fp = fopen("MyPlayground.rtf", "w");
//printf("LINE 30 CLEAR");
fprintf(fp,"%d",++value);
fclose(fp);
}
#包括
#包括
int main(int argc,const char*argv[]{
文件*fp;
printf(“第13行清除”);
fp=fopen(“myplayerd.rtf”,“r”);
int值;
fscanf(fp、%d、&value);
printf(“值为%d”,值);
//printf(“第14行清除”);
如果(fp==NULL)
{
printf(“第17行清除”);
if(fopen(“myplayerly.rtf”,“w”)==NULL)
{
出口(0);
}
//fprintf(fp,“%d”,0);
fclose(fp);
返回0;
}
//printf(“第25行清除”);
fp=fopen(“myplayerd.rtf”,“w”);
//printf(“第30行清除”);
fprintf(fp,'%d',++值);
fclose(fp);
}
编辑:程序一直运行到“printf(“第17行清除”);”之后,在下一行中出现“EXC-BAD-ACCESS”错误
编辑1:修复了两条不同的路径
EDIT2:为第二个fopen(…)
语句添加了错误检查
另外,请随意评论任何风格错误以及我应该/不应该做的事情。谢谢。我打赌这只会在你第一次运行它时发生。第11行的原因是: 11 fprintf(fp,0) 您基本上是在向fprintf传递一个空指针。你可能想做的是: 11 fprintf(fp,“0”) 这就是我是怎么想出来的。我用调试信息编译它,并使用调试器运行它。。。准确地说,lldb: (lldb)英国电信 *线程#1:tid=0xacaaf,0x00007fff90f4dcf6 libsystem_c.dylib
uu vfprintf+327,队列='com.apple.main thread',停止原因=EXC_坏访问(代码=1,地址=0x0)
*帧#0:0x00007fff90f4dcf6 libsystem_c.dylib
u vfprintf+327
frame #1: 0x00007fff90f762e7 libsystem_c.dylib`__v2printf + 471
frame #2: 0x00007fff90f766bc libsystem_c.dylib`__xvprintf + 633
frame #3: 0x00007fff90f4db36 libsystem_c.dylib`vfprintf_l + 54
frame #4: 0x00007fff90f4669b libsystem_c.dylib`fprintf + 186
frame #5: 0x0000000100000e9d test.out`main(argc=1,
测试时argv=0x00007fff5fbffc60)+109。c:11
帧#6:0x00007fff8f9c95fd libdyld.dylib`start+1
…如果你看第5帧,您将看到有问题的代码行。检查您的所有fopen和fscanf调用是否通过检查它们的返回值来工作。检查
/Desktop/hw3/
目录是否具有写入权限。花30分钟学习系统的调试器,并在您的余生中节省编写调试语句的天数和时间。你真的只需要知道如何设置和清除断点,进入函数和打印变量…@Shravan40是的。顺便说一句,没有语言“C/C++”,它们是两种不同的语言。例如,C++有<代码> STD::IFStry、fp=fopen(“/Desktop/hw3/hw3/myplayerdy.txt”,“w”)代码>在它创建的目录中找不到具有该名称的文件。所以我不明白为什么在那句话之后它会是空的。@MarcoNeves他不是说fp
是空的,他指的是第二个参数。哦,我明白了,这样做fprintf(fp,“%d”,0)
在技术上可以修复它,对吗?@MarcoNeves我在问题中没有看到这个错误。为什么要在编辑中删除它,因为这很可能是问题所在。@MarcoNeves“如果fopen(…)在该目录中找不到具有该名称的文件,它只会创建一个”以fopen()为谓词。即使您有充分的理由相信它会成功,也应该检查返回值以确保它不为NULL。它可能会失败,因为目录不存在,权限不正确。。。