strtok不接受:char*str

bks*_*bks 3 c string strtok

当使用char*str作为第一个参数(不是分隔符字符串)时,strtok将无法正常工作.

它是否与在该表示法中分配字符串的区域有关?(据我所知,这是一个只读区域).

提前致谢

例:

//char* str ="- This, a sample string.";   // <---doesn't work
char str[] ="- This, a sample string.";   // <---works
char delims[] = " ";
char * pch;
printf ("Splitting string \"%s\" into tokens:\n",str);
pch = strtok (str,delims);
while (pch != NULL)
{
  printf ("%s\n",pch);
  pch = strtok (NULL, delims);
}
return 0;
Run Code Online (Sandbox Code Playgroud)

小智 6

在第一种情况下,您将字符串文字传递给strtok().由于strtok()修改了此字符串,并且由于字符串文字无法合法修改,因此最终会出现未定义的行为.在第二种情况下,编译器将字符串复制到数组中.数组内容可以修改,所以这段代码没问题.