gpt4 book ai didi

c - 空检查前取消引用

转载 作者:太空宇宙 更新时间:2023-11-04 01:07:26 25 4
gpt4 key购买 nike

我编写函数来创建目录并强制它归用户所有。

int mkdir_and_force_owner( const char *path, uid_t uid, gid_t gid )
{
/* deref_ptr_in_call: Dereferencing pointer "path" */
if( mkdir( path, S_IRWXU ) < 0 ) {
if( errno != EEXIST ) {
lfprintf( stderr, _("Cannot create %s: %s\n"), path, strerror( errno ) );
} else {
DIR *temp_dir = opendir( path );
/* check_after_deref: Null-checking "path" suggests that it may be null, but it has already been dereferenced on all paths leading to the check */
if( !path ) {
lfprintf( stderr, _("Cannot open %s: %s\n"), path, strerror( errno ) );
} else {
closedir( temp_dir );
return 1;
}
closedir( temp_dir );
}
} else {
if( chown( path, uid, gid ) < 0 ) {
lfprintf( stderr, _("Cannot change owner of %s: %s.\n"), path, strerror( errno ) );
} else {
return 1;
}
}

return 0;
}

但是这段代码得到了这个警告:

空检查“路径”表明它可能为空,但它已经在导致检查的所有路径上被取消引用。我需要同样的帮助来解决这个问题谢谢

最佳答案

在您将“无法打开”消息打印到 stderr 的那一行,编译器已经足够友好地注意到您根据定义试图向 lfprintf 传递一个 NULL 字符串指针。因为它包含在 if (!path) {} block 中。您是想说 if (!temp_dir) 吗?

关于c - 空检查前取消引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19821408/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com