使用字符串变量作为路径时,fopen()为null

时间:2017-12-14 10:33:39

标签: c fopen

char path[strlen(dictionary) + 3];
strcat(path, "./");

// dictionary is "dictionaries/large" char*
strcat(path, dictionary);

// dictionaryFile != NULL
FILE *dictionaryFile = fopen("./dictionaries/large", "r");

// dictionaryFile == NULL
FILE *dictionaryFile = fopen(path, "r");

if (dictionaryFile == NULL)
{
    printf("Not success\n");
}

我正在尝试打开相对于.c文件当前目录的文件夹内的文件。

为什么当我使用路径变量fopen()时不起作用,但是当我直接传递它有效的目录时呢?

1 个答案:

答案 0 :(得分:8)

char path[strlen(dictionary) + 3];
strcat(path, "./");

此处path未初始化;而strcat期望它以空字节终止。请改用strcpy,例如:

char path[strlen(dictionary) + 3];
strcpy(path, "./");

但是,您的代码中可能存在其他问题,因为fopen()可能会失败。检查errno并使用perror()查看失败的原因。