使用getcwd在C字符串中一致地获取空值



我想做一个简单的程序,只是写你的工作目录到一个文件,我不能,为我的生活,弄清楚我做错了什么。无论我做什么,在调用getcwd()之后,我的缓冲区存储的都是null。我怀疑这可能与权限有关,但据称,linux现在做了一些魔法来确保getcwd几乎永远不会有访问问题(关键字,"几乎")。有人能在自己的机器上测试一下吗?还是我遗漏了一个明显的bug ?

#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main(int argc, char *argv[])
{
        printf("Error is with fopen if stops heren");
        FILE* out_file = fopen("dir_loc.sh","w+");
        char* loc = malloc(sizeof(char)*10000);
        size_t size = sizeof(loc);
        printf("Error is with cwd if stops heren");
        loc = getcwd(loc,size);
        printf("%s",loc);
        fprintf(out_file,"cd %s",loc);
        printf("Error is with fclose if stops heren");
        free(loc);
        fclose(out_file);
        return 0;
}

gcc main.c编译(文件名为"main.c")

编辑:正如不同的海报提到的,sizeof(loc)取char指针的大小,而不是分配给该指针的空间量的大小。将其更改为malloc(sizeof(char)*1000),它就可以正常工作了。

你的问题在这里:

size_t size = sizeof(loc);

你得到的是char指针的大小,而不是为char分配的内存。

改为:

size_t size = sizeof(char) * 10000;

或甚至到

size_t size = 10000;

,因为sizeof(char)保证为1。

并且由于您在随后对getcwd的调用中使用size,因此您显然将有太少的空间来存储大多数路径,因此您的结果并不令人惊讶

如果你不想每次修改时都在代码中更改多个不同的数字,你可以使用#DEFINE文本替换来解决这个问题。

:

#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#define LOC_ARRAY_SIZE 10000 // Here you define the array size
int main(int argc, char *argv[])
{
        printf("Error is with fopen if stops heren");
        FILE* out_file = fopen("dir_loc.sh","w+");
        char* loc = malloc(sizeof(char)*LOC_ARRAY_SIZE); // sizeof(char) could be omitted
        size_t size = sizeof(char)*LOC_ARRAY_SIZE;
        printf("Error is with cwd if stops heren");
        loc = getcwd(loc,size);
        printf("%s",loc);
        fprintf(out_file,"cd %s",loc);
        printf("Error is with fclose if stops heren");
        free(loc);
        fclose(out_file);
        return 0;
}

相关内容

  • 没有找到相关文章

最新更新