getcwd() 在创建新指针后返回 NULL

Naz*_*rke 1 c segmentation-fault getcwd

我刚开始学习linux和C,请不要严格评判我。

我正在尝试查找当前工作目录并打开该目录中的文件以查找特定单词。如果我只找到 cwd,它会给出正确的 cwd,但是当我添加 while 循环 cwd 为空时。

#include <unistd.h>
#include <stdio.h>
#include <limits.h>
main(){
char *buff;
char *currentDir =getcwd(buff,PATH_MAX);

printf("Current directory: %s\n",currentDir);

FILE *file;
char *filename = "profile";
file = fopen(filename,"r");
if(file == NULL)
{
fprintf(stderr,"File %s wasn't found\n",filename);
}

while(1)
{
    char buffer[80];
    char *token;
    fgets(buffer,80,file);
    if(feof(file))
    {break;}
    else{
    *token = strtok(buffer,"=");
        if(strcmp(token,"HOME")==1);
        {
        printf("HOME token is found");
        } 
    }
free(token);
}

fclose(file);
}
Run Code Online (Sandbox Code Playgroud)

输出:当前目录:(空)分段错误

alk*_*alk 5

buff 指向随机内存。

你可能想这样声明buff

char buff[PATH_MAX] = "";
Run Code Online (Sandbox Code Playgroud)

如果在 Linux 上,则可以getcwd()通过这样做来分配所需的内存:

char * currentDir = getcwd(NULL, 0);
Run Code Online (Sandbox Code Playgroud)

currentDir完成后需要传递给free()它,buff然后不需要。