我的fgets实现读取fgets的实际内容,但如果在文件中找到NULL字符串,它会读取垃圾?

时间:2015-09-05 22:35:37

标签: c file null fgets

我已经实现了自己的find_module(即def find_module(self, fullname, path=None): imp.acquire_lock() module_loader = None # None means - no module found by this importer. # Look in the file list of sys.prefix path (alias PYTHONHOME). for ext, mode, typ in self._c_ext_tuples: if fullname + ext in self._file_cache: module_loader = self self._suffix = ext self._c_ext_tuple = (ext, mode, typ) break imp.release_lock() return module_loader )。当我的文件中有NULL字符串必须由fgets函数读取时,它会打印所有字符串(好)但有一些垃圾(坏),但是如果我使用预定义myfgets那么就有没有垃圾。下面是我的代码和文件内容,其中包含NULL字符串。

MYFILE

hello word NULL 早安//如果删除了NULL,那么它的好

myfgets

输出:

fgets

2 个答案:

答案 0 :(得分:2)

您的字符串空终止的逻辑被破坏了。在每个字符之后写一个NUL字节,除了最后一个字符。将写入NUL的行移到循环之后。

顺便说一句,我看到的变量名比I_help_Notify_IfNotRead差,但不常见。 out出了什么问题?

答案 1 :(得分:1)

空字符未附加到正确的点@rici& @Jim Balter。这是主要问题。推荐

if (size > 0) {   
  while(--size>0 && (c=getc(fp)) != EOF) {
    *I_help_Notify_IfNotRead++ = c;
    if (c == '\n') break;
  }
  *I_help_Notify_IfNotRead = '\0';
}

转角案例问题:

如果size == 1,则不写入空字符。 (上面已修复)

myfgets()不符合:“如果在操作期间发生读取错误,则返回空指针。”也许:

if (c == EOF) {
  if (ferror(fp)) return NULL;
  if (feof(fp) && I_help_Notify_IfNotRead == Buffer_address) return NULL;
}
return Buffer_address;