我编写了一个C函数,将char*作为输入,并使用空格将其拆分,然后再次将标记存储在字符串数组中。
我的代码执行正确,但在它完成执行之前,它会给出一个错误,说分割错误。谁能告诉我出了什么事吗。
void parseCommand(char *msg)
{
char buffer[25][30];
char *tok;
char *msgCopy;
//strcpy(msgCopy,msg);
msgCopy =msg;
tok = strtok(msgCopy," ");
strcpy(buffer[0],tok);
int i=1;
while(tok != NULL ){
tok = strtok (NULL, " ");
strcpy(buffer[i],tok); //me line eke error eka
printf("%d : %s\n",i,buffer[i]);
i++;
}
}
最佳答案
strtok
最后返回NULL
以表示不再有标记,并调用试图从strcpy(buffer[i],tok);
读取的NULL
。这会导致segfault。
您可以通过将strtok
移动到循环条件中来解决它:
while((tok = strtok (NULL, " ")) != NULL ){
strcpy...
或使用
break
语句转义循环:while(1){
tok = strtok (NULL, " ");
if(tok == NULL) break;
strcpy...
关于c - 函数执行但给出段错误,C,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15933318/