0

我无法理解我在网上找到的这个示例代码。你能帮我理解这个吗

#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))

4

1 回答 1

1

当然。

首先,代码片段通过将指向ated 的 1025 字节长缓冲区的指针分配给该指针来泄漏内存,然后重新分配.malloc()datafopen()

其次,代码错误地假设fopen()总是成功,向用户打印一条误导性的信息消息,然后尝试读取一行或最多 1023 个字节到缓冲区outMsg

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

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


简而言之,无论是谁向你提供了这段“示例代码”,都应该被永久禁止编程。

于 2013-03-18T06:11:20.903 回答