C++ 写入文件时出现分段错误

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

更新的代码功能齐全***

我是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("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、 STD::FStruts和 STD::String 从文件读取文本,C语言没有。C语言不支持函数重载。未向fprintf传递空指针。如果
fp=fopen(“/Desktop/hw3/hw3/myplayerdy.txt”,“w”)在它创建的目录中找不到具有该名称的文件。所以我不明白为什么在那句话之后它会是空的。@MarcoNeves他不是说
fp
是空的,他指的是第二个参数。哦,我明白了,这样做
fprintf(fp,“%d”,0)
在技术上可以修复它,对吗?@MarcoNeves我在问题中没有看到这个错误。为什么要在编辑中删除它,因为这很可能是问题所在。@MarcoNeves“如果fopen(…)在该目录中找不到具有该名称的文件,它只会创建一个”以fopen()为谓词。即使您有充分的理由相信它会成功,也应该检查返回值以确保它不为NULL。它可能会失败,因为目录不存在,权限不正确。。。