getcwd()
是一個 C++ 標準庫函數,用于獲取當前工作目錄的路徑
<unistd.h>
頭文件,因為 getcwd()
函數在這個頭文件中聲明。#include <unistd.h>
#include <iostream>
#include <vector>
檢查返回值:getcwd()
函數返回一個指向字符數組的指針,該數組包含當前工作目錄的路徑。如果函數成功執行,它將返回一個非空指針。如果失敗,它將返回 nullptr
。因此,你需要檢查返回值是否為 nullptr
,并在這種情況下處理錯誤。
分配足夠的空間:getcwd()
函數返回的字符數組的大小取決于當前工作目錄的路徑長度。為了避免緩沖區溢出,你需要為返回的字符串分配足夠的空間。你可以使用 sysconf(_SC_PATH_MAX)
函數獲取路徑的最大長度。
#include <sys/sysconf.h>
size_t path_max = sysconf(_SC_PATH_MAX);
char *buffer = new char[path_max];
getcwd()
:現在你可以調用 getcwd()
函數并將結果存儲在之前分配的緩沖區中。if (getcwd(buffer, path_max) != nullptr) {
std::cout << "Current working directory: " << buffer << std::endl;
} else {
perror("getcwd() error");
delete[] buffer;
return 1;
}
delete[] buffer;
將以上代碼片段組合在一起,完整的示例程序如下:
#include <unistd.h>
#include <iostream>
#include <vector>
#include <sys/sysconf.h>
int main() {
size_t path_max = sysconf(_SC_PATH_MAX);
char *buffer = new char[path_max];
if (getcwd(buffer, path_max) != nullptr) {
std::cout << "Current working directory: " << buffer << std::endl;
} else {
perror("getcwd() error");
delete[] buffer;
return 1;
}
delete[] buffer;
return 0;
}
這個程序將輸出當前工作目錄的路徑。如果發生錯誤,它將輸出錯誤消息并返回非零值。