我想使用stat
功能。但我不知道如何用变量做到这一点。我从其他一些过程中获得了DIRECTORY和sub-dir的值。
if( stat( DIRECTORY/sub-dir, &st ) == 0 )
{--}
我收到如下"error: invalid operands to binary /"
答案 0 :(得分:2)
您需要创建一个字符串并将其传递给stat()
。假设VLA支持(C99或C11具有相关选项),则:
char path[strlen(DIRECTORY) + strlen(subdir) + sizeof("/")];
snprintf(path, sizeof(path), "%s/%s", DIRECTORY, subdir);
struct stat st;
if (stat(path, &st) != 0)
...oops!...
else
...process data...
如果您没有VLA支持,则可以使用固定大小的数组或malloc()
和free()
。
或者:
char path[PATH_MAX]; // Beware: not always defined; _POSIX_PATH_MAX?
或者:
size_t pathlen = strlen(DIRECTORY) + strlen(subdir) + sizeof("/");
char *path = malloc(pathlen);
if (path != 0)
{
snprintf(path, pathlen, "%s/%s", DIRECTORY, subdir);
struct stat st;
if (stat(path, &st) != 0)
...oops!...
else
...process data...
free(path);
}
答案 1 :(得分:1)
应该是
if( stat( "DIRECTORY/sub-dir", &st ) == 0 )
请参阅stat()手册页:
int stat(const char *path, struct stat *buf);
第一个参数(路径)应该是const char *
类型,因此路径应该像"DIRECTORY/sub-dir"
如果DIRECTORY
和sub_dir
是变量,那么你必须在第三个变量中连接它们:
char buf[256];
sprintf(buf, "%s/%s", DIRECTORY, sub_dir);
if( stat( buf, &st ) == 0 )