用 c/c++ 获取当前工作目录的方法:getcwd
首先我们来看一下该函数的声明:
#include<unistd.h>
char* getcwd(char* buffer, size_t size);
用法介绍:
参数说明:getcwd 方法会将当前工作目录(working directory)的绝对路径复制到参数 buffer 所指的内存空间中,而参数 size 是 buffer 所指的空间大小。
- 第一种用法:
基于上面的解析我们很容易得到第一种用法。
#define MAX_SIZE 255
int main(int argc, const char* argv[]){
char path[MAX_SIZE];
getcwd(path,sizeof(path));
puts(path); // puts is equal to print. In c++ we can use: cout << path << endl;
return 0;
}
上面的方法会将当前工作目录的绝对路径复制到 path 所指的空间中,其中 size 通过宏定义 MAX_SIZE 给出。但是这种方法有个弊端。当我们的工作目录绝对路径长于所指定的 size 时,则会返回 NULL。所以用第一种方法时需要分配足够大的内存空间。linux的文件名长度限制为 255 个英文字符,所以一般需要指定 MAX_SIZE 为 255。
- 第二种用法:
可以把 buffer 置为 NULL 并且是 size 为 0来使用 getcwd。此时,getcwd 会调用 malloc 动态的为 buffer 分配空间,所以我们应当在使用过后给 buffer 释放掉空间。
int main(int argc, const char* argv[]){
char* path;
path = getcwd(NULL, 0);
puts(path);
free(path);
return 0;
}
网友评论