本期常量char *的字符串構造函數改變常量char *的值?
一個const char *的值似乎正在改變,以一個荒謬的價值。
故障代碼示例
下面的代碼的意圖是創建具有 BASEDIR的值的字符串。這個過程應該保持的值基於不變;然而,它莫名其妙地改變。
ProcessInfo get_process(int pid, const char* basedir) {
cout<<basedir<<endl;
string basedir_str=basedir;
cout<<basedir<<endl;
....}
電流輸出
./proc/16224/task
▒▒v▒=+
出了什麼問題與爲const char *字符串賦值?
基本目錄的設置
變量 BASEDIR被用在 「父」 功能get_all_processes呼叫分配。
父函數
vector<ProcessInfo> get_all_processes(const char* basedir) {
DIR* dir;
struct dirent *entry;
vector<ProcessInfo> totalProcesses;
//check to see if basedir can be opened
if((dir =opendir(basedir))!=NULL){
while((entry = readdir(dir)) != NULL){
int pid = atoi (entry->d_name);
if(pid <=0){
continue;
}
else{
ProcessInfo currentProcess = get_process(pid, basedir); //<--call to get_process
totalProcesses.push_back(currentProcess);
}
}
closedir(dir);
}
return totalProcesses;
}
呼叫到父函數
myProcessInfo.threads=get_all_processes(threadList_fileName);
//threadList_filename='./proc/[pid]/task', in this case pid =16224
解決方案
消除臨時爲const char * threadList_fileName並更改 get_all_processes函數的參數。 myProcessInfo.threads=get_all_processes(("./proc/"+pid_str+"/task").c_str());
這可能是由於字符串賭注不是以NULL結尾?該參考文件說它導致了未定義的行爲。 – iksemyonov