使用绝对路径打开文件

时间:2012-03-15 14:41:47

标签: c file-io

我正在尝试使用绝对路径打开文件。我目前正在Windows中执行此操作,但也需要在Unix环境中使用它。

路径由环境变量组成,如下所示。

char *dataPath = getenv ("DATA");
strcat(dataPath, "/index");
char indexPath[255] = {0};
strcat(indexPath, dataPath);
strcat(indexPath, "/index.tbl");
printf("Path: %s\n", indexPath);
ip = fopen(indexPath, "r");

此代码打印出C:\ Data / index / index.tbl,但应用程序无法打开文件。

我做错了什么?

1 个答案:

答案 0 :(得分:3)

这是不正确的:

char *dataPath = getenv ("DATA");
strcat(dataPath, "/index"); 

并且可能会覆盖进程'环境块的一部分。来自man getenv

  

通常实现时,getenv()返回指向环境列表中字符串的指针。调用者必须注意不要修改此字符串,因为这会改变进程的环境。

您需要分配足够大的缓冲区以包含完整路径并复制到getenv("DATA")然后strcat()sprintf()

const char* dataPath = getenv("DATA");
char* fullPath = 0;
if (dataPath)
{
    /* 6 for "/index" and 1 for terminating null character. */
    fullPath = malloc(strlen(dataPath) + 6 + 1);
    if (fullPath)
    {
        sprintf(fullPath, "%s/index", dataPath);

        free(fullPath);
    }
}