有人能解释一下这段代码片段在做什么吗?
我有麻烦理解我在网上找到这个例子代码。能否请你帮我在理解这个有人能解释一下这段代码片段在做什么吗?
#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()
ated,1025字节长的缓冲器向data
指针,然后将其重新分配的fopen()
返回值。
其次,代码错误地假定fopen()
总是成功,打印误导信息消息给用户,然后尝试读取一行或至多1023个字节到缓冲器outMsg
。
第三,如果调用fgets()
成功,它会打印“成功”消息。
在步骤4,它抓住长度与数据刚读,错误地将其分配给类型的变量int
(它应该是size_t
代替),然后使用printf()
显示长度和消息到控制台。
简而言之,无论谁给你提供这段“示例代码”,都应永久禁止编程。
对不起,我只是编辑我原来的帖子..我尝试修复代码一点我自己..我得到摆脱malloc和我仍然得到分段错误 我仍然是编程的菜鸟,所以,请你给我方法来解决这个 – sukhvir 2013-03-18 06:14:36
@sukhvir否,除非你使用调试器。 – 2013-03-18 06:16:07
我确实使用了调试器..这是调试错误: 编程接收到的信号EXC_BAD_ACCESS,无法访问内存。 原因:地址中的KER_INVALID_ADDRESS:0x0000000000000068 0x00007fff9126e3a5 fgets() – sukhvir 2013-03-18 06:30:56
什么是'PKTNAME'? – 2013-03-18 06:54:18
另外,在你的'fopen'后面加上代码:'if(data!= NULL)'。这将确保您的代码在文件未找到时不会继续。 – 2013-03-18 07:01:21
'#define PKTNAME“Msg”' 不打开使用名称PKTNAME创建文件? 如果fopen只打开名称为“PKTNAME”的文件,该文件必须位于何处? – sukhvir 2013-03-18 07:03:14