本期常量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