0

我想使用该stat功能。但我不知道如何使用变量来做到这一点。我从其他进程中获得了 DIRECTORY 和 sub-dir 的值。

if( stat( DIRECTORY/sub-dir, &st ) == 0 )
{--}

我收到如下错误消息"error: invalid operands to binary /"

4

2 回答 2

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()and 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);
}
于 2013-10-29T16:25:53.897 回答
1

它应该是

if( stat( "DIRECTORY/sub-dir", &st ) == 0 )

请参阅stat()手册页:

int stat(const char *path, struct stat *buf);

第一个参数(路径)应该是一个const char *类型,所以路径应该像字符串一样提供"DIRECTORY/sub-dir"

如果DIRECTORYsub_dir是变量,那么您必须将它们连接到第三个变量中:

char buf[256];
sprintf(buf, "%s/%s", DIRECTORY, sub_dir);
if( stat( buf, &st ) == 0 )
于 2013-10-29T15:49:26.620 回答