可能重复: 给出分割故障
我尝试使用strtok函数在许多令牌中拆分字符串,但在本例中它将返回一个seg。错误错误。我哪里错了??
#include <stdio.h>
#include <string.h>
int main(int argc, char** argv){
int i=0;
char * string = "HI:HOW:ARE:YOU:?", *tmp;
while(1){
if(i==0) tmp=strtok(string,":");
else tmp=strtok(NULL,":");
if(tmp==NULL) break;
printf("%s\n",tmp);
i++;
}
return 1;
}发布于 2012-11-03 11:54:23
变化
char * string = "HI:HOW:ARE:YOU:?"为
char string [] = "HI:HOW:ARE:YOU:?"使用char字符串[],您有一个数组,char *有一个指针。当您声明一个数组时,它将请求空间来分配字符串的大小。char *字符串创建指向文字字符串的指针。
char *string的问题在于不应该更改点,因为字符串文本通常存储在只读内存中,从而导致未定义的行为33。
(有关更多细节,请阅读此https://www.securecoding.cert.org/confluence/display/seccode/STR30-C.+Do+not+attempt+to+modify+string+literals )
因此,由于使用strtok,字符串的内容将被修改并分解为较小的字符串(令牌),因此会出现问题。
https://stackoverflow.com/questions/13208828
复制相似问题