我很难理解我在网上找到的这个示例代码。能帮助我理解这个
#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))
答案 0 :(得分:1)
不确定
首先,代码段泄漏内存,为malloc()
指针分配一个指向data
,1025字节长缓冲区的指针,然后重新分配fopen()
的返回值。
其次,代码错误地认为fopen()
总是成功,会向用户输出误导性信息消息,然后尝试读取一行或最多1023个字节到缓冲区outMsg
。
第三,如果对fgets()
的调用成功,则会打印“成功”消息。
在第四步中,它会抓取刚刚读取的数据的长度,错误地将其分配给int
类型的变量(它应该是{{ 1}}代替),然后使用size_t
向控制台显示长度和消息。
简而言之,任何向您提供此“示例代码”的人都应该被永久禁止编程。