Вызов функции stat
Я хочу использовать stat
функция. Но я не знаю, как это сделать с переменными. Я получаю значение DIRECTORY и sub-dir из какого-то другого процесса.
if( stat( DIRECTORY/sub-dir, &st ) == 0 )
{--}
Я получаю сообщение об ошибке следующим образом "error: invalid operands to binary /"
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);
}
Так должно быть
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 )