linux下c语言编程出现段错误

intsavetofile(RGBQUAD*pRGB,intwidth,intheight){FILE*fp;charfilename[50]="NULL";printf... int savetofile(RGBQUAD *pRGB,int width,int height){ FILE *fp; char filename[50]="NULL"; printf("%s","Please Enter the save filename.txt\n"); scanf("%s",&filename); fp = fopen(filename,"wb"); char rgbRed[3],rgbGreen[3],rgbBlue[3]; char *flag,*flag_width,*flag_height; for (int i=0;i< height ;i++){ for (int j=0;j< width;j++){ sprintf(flag_height,"%03d",i+1); sprintf(flag_width,"%03d",j+1); flag=flag_height; strcat(flag,flag_width); //printf("%s",flag); sprintf(rgbRed,"%d",pRGB->rgbRed); sprintf(rgbGreen,"%d",pRGB->rgbGreen);fprintf(fp,"%s %-s %-s %-s\n",flag,rgbRed,rgbGreen,rgbBlue); //printf("%3d %3d %3d\r\n", pRGB->rgbRed,pRGB->rgbGreen,pRGB->rgbBlue); printf("%s %-s %-s %-s\n", flag,rgbRed,rgbGreen,rgbBlue); pRGB++; } } 展开
 我来答
怀蔚谯华池
2019-11-20 · TA获得超过3752个赞
知道大有可为答主
回答量:3138
采纳率:28%
帮助的人:181万
展开全部
简单看了一下你的程序
首先,你没有给出完整的程序,这个让大伙看起来确实不方便,因为没有main函数,可能踩内存的地方并不是这个函数本身,是main函数
其次说你的这个函数,貌似确实有点问题,但是由于没有完整的程序,我只说出我的理解,如果有错,直接忽视就好
sprintf(flag_height,"%03d",i+1);
sprintf(flag_width,"%03d",j+1);
我觉得问题出在这里,你查下
sprintf
的用法,第一个参数应该是一个字符串的首地址,你写的确实没有错,参数给入的是一个地址flag_height,但是纵观你的程序,你并没有给这个指针赋值,程序运行到这里,估计在默认创建指针的时候应该赋值为NULL(貌似根据编译器不同而有不同),那个寻址后报出段错误,也是意料之中了
由于没有你完整的代码,不知道你要做什么,修改意见不好提
给出个人意见,仅供参考
如果要打印flag_height中的值,首先应该给flag_height指针分配一片内存,使用malloc函数,其次在向内从中写入值,然后调用sprintf,就应该没有问题了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式