我编写了一个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++;
}
}
答案 0 :(得分:3)
strtok
最终返回NULL
表示没有其他令牌,并且您致电strcpy(buffer[i],tok);
并尝试从NULL
读取。这会导致段错误。
您可以通过将strtok
移动到循环条件来解决它:
while((tok = strtok (NULL, " ")) != NULL ){
strcpy...
或使用break
语句转义循环:
while(1){
tok = strtok (NULL, " ");
if(tok == NULL) break;
strcpy...