我无法理解我在网上找到的示例代码。你能帮我了解一下吗
#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))
最佳答案
当然。
首先,代码片段通过将指向malloc()
的1025字节长的缓冲区的指针分配给data
指针,从而泄漏内存,然后将其重新分配fopen()
的返回值。
其次,代码错误地假定fopen()
总是成功,向用户打印一个误导性的信息消息,然后尝试读取一行或最多1023个字节到缓冲区outMsg
。
第三,如果对fgets()
的调用成功,它将打印“成功”消息。
在第四步中,它获取刚刚读取的数据的长度,错误地将其分配给类型为int
的变量(应改为size_t
),然后使用printf()
显示长度和消息。安慰。
简而言之,无论谁为您提供了这段“示例代码”,都应永久禁止其编程。