我已经实现了自己的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
答案 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;