有人可以解释一下这段代码片段在做什么吗?

时间:2013-03-18 06:02:52

标签: c macos segmentation-fault

我很难理解我在网上找到的这个示例代码。能帮助我理解这个

#define PKTNAME     "Msg"
FILE *data;       
char outMsg[1500]="getmybw\0";

data = fopen(PKTNAME,"r");
printf("file open success!!\n");
if(fgets(outMsg, 1024, data))
    printf("Msg read success!\n"); 
outMsgLen = strlen(outMsg)+1;
printf("outMsgLen is: %d,\toutMsg is:\n%s\n",outMsgLen,outMsg);

此外,当我运行此代码时,我在此行遇到了分段错误:

if(fgets(outMsg, 1024, data))

1 个答案:

答案 0 :(得分:1)

不确定

首先,代码段泄漏内存,为malloc()指针分配一个指向data,1025字节长缓冲区的指针,然后重新分配fopen()的返回值。

其次,代码错误地认为fopen()总是成功,会向用户输出误导性信息消息,然后尝试读取一行或最多1023个字节到缓冲区outMsg

第三,如果对fgets()的调用成功,则会打印“成功”消息。

在第四步中,它会抓取刚刚读取的数据的长度,错误地将其分配给int 类型的变量(它应该是{{ 1}}代替),然后使用size_t向控制台显示长度和消息。


简而言之,任何向您提供此“示例代码”的人都应该被永久禁止编程。