Arrays C++;数组正在用循环中的当前值覆盖每个元素

Arrays C++;数组正在用循环中的当前值覆盖每个元素,arrays,pipe,parent,Arrays,Pipe,Parent,我对一些事情很困惑。我有一个循环,它从一个子进程读回值并将它们插入一个字符数组(称为sleepTime)。我得到了正确的值(将它们放入char数组后立即在控制台中显示),但是当循环读取下一个值时,数组中的所有内容都将更新为从管道读取的当前值。退出循环后,我再次打印结果,数组的每个元素都是最后一次读取的值。有人能解释一下吗?我被难住了 char* sleepTime[4]; char randNumSend[15]; char randNumRet[15]; for (int i=0; i<

我对一些事情很困惑。我有一个循环,它从一个子进程读回值并将它们插入一个字符数组(称为sleepTime)。我得到了正确的值(将它们放入char数组后立即在控制台中显示),但是当循环读取下一个值时,数组中的所有内容都将更新为从管道读取的当前值。退出循环后,我再次打印结果,数组的每个元素都是最后一次读取的值。有人能解释一下吗?我被难住了

char* sleepTime[4];
char randNumSend[15];
char randNumRet[15];
for (int i=0; i<nWorkers; i++){ // loop to read back values from child process
    read(pipe2[0],randNumRet,strlen(randNumSend));  // read back data
    sleepTime[i]=randNumRet; // save values as string for execlp command
    cout << "sleepTime" << i+1 << ": " << sleepTime[i]<< endl;
}

close(pipe2[0]);    // close read end of pipe2

for (int i =0; i<nWorkers; i++){
    cout << "sleepTime" << i+1 << ": " << sleepTime[i]<< endl;
}
char*睡眠时间[4];
char-randNumSend[15];
char-randNumRet[15];

for(inti=0;i
char*sleepTime[4];
是指针数组

如果您写入
sleepTime[i]
您正在写入未分配的内存。这是一个错误

要分配,您可以在阵列中循环并执行以下操作:

sleepTime[i] = malloc(sizeof(char) * length_of_string);
然后不要忘记对
free(sleepTime[i]);
执行同样的操作,以避免泄漏

< C++ >使用<代码> STD::String < /Cord>。 用法:

std::string foo = "blah blah";

std::string bar;  

bar = "blah blah";

sleep time中的值都指向同一数组。我建议尝试sleeptime[4][15],并用sleeptime[i]替换randNumRet(在读取函数中)

如何声明
sleepTime
呢?我们可以看到您在哪里声明了randNumRet、randNumSend和sleepTime吗?我在代码的顶部添加了sleepTime、randNumSend和randNumRet的变量声明。在代码的后面,我将运行execlp()在我把数组设为一个字符之前,它一直给我错误。我认为这里有一些基本的东西,我不知道。我对C++非常陌生。<代码> ExcCLP(const char)<代码>期望一个<代码> conchchar */Cudio>。如果你没有一个,你可以通过变量的地址<代码> char f= 'a ';
,但是看到你有一个指针数组,你可以只做
exceclp(sleepTime[i]);
我不知道如何使用std::string