在下面的代码中我有一个函数int GetTempString(char Query[]);
在主要工作中称它为好。
但是,当从fork调用该函数时,fork会在此行之前挂起(停止运行,没有错误,没有输出):pch = strtok (Query," ,");
printf显示指向pch的指针为空。同样,这只有在fork执行时才会发生。
我做错了什么?
int main()
{
if((Timer =fork())==-1) printf("Timer Fork Failed");
else if(Timer==0)
{
while(1)
{
sleep(2);
GetTempString("ch 1,2,3,4");
}
}
else
{
//CODE
GetTempString("ch 1,2,3,4");
}
}
int GetTempString(char Query[])
{
char * pch;
printf("DEBUG: '%s'-'%d'\n",Query,pch);
pch = strtok (Query," ,");//* PROBLEM HERE*
//while loop for strtok...
return 1;
}
答案 0 :(得分:2)
strtok
修改其第一个参数指向的字符串(用NUL替换分隔符),但是你传入一个字符串文字,它是隐式的const。在调用strtok之前,需要将字符串复制到可写缓冲区中。
使用您的示例,这会在两个进程中发生,因此两者都会崩溃。当发布一个简短的示例来演示一个问题时,请务必首先编译并测试它,以确保它实际显示您遇到的问题,而不是一些完全不相关的问题(这可能就是这种情况)。
答案 1 :(得分:0)
您的函数返回一个局部变量,因此您有未定义的行为 - 之后可能发生任何事情。您需要使用malloc()动态分配要返回的字符串,或者将其作为参数传递给函数。
答案 2 :(得分:0)
TempString变量在GetTempString函数的堆栈上分配。使用此变量仅在GetTempString的上下文中使sens。使用静态TempString [50]来解决这个问题。