我正在尝试编写一个解析字符串(一个char *
)字符的函数,但由于某种原因我收到了一个细分错误。我正在尝试读取用户输入并解析程序名称和参数,但这有点不敬。
控制台:
>./mish
>mish>ls
>command start:ls
>*tempCommand:l
>bottom
>Segmentation fault
代码:
ParserData parseCommand(ParserData parserData, char* command)
{
char* tempCommand;
char* currToken = '\0';
short firstSpace = 0;
printf("command start:%s \n", command);
strcpy(tempCommand, command);
while(*tempCommand)
{
printf("*tempCommand:%c \n", *tempCommand);
if((char)*tempCommand == ' ' && firstSpace == 0)
{
printf("currToken: %c \n", (char)*currToken);
strcpy(parserData.myChildProgramName,currToken);
printf("after:");
currToken = '\0';
firstSpace = 1;
}
else if((char)*tempCommand != ' ' && *tempCommand != '-')
{
//strcat(currToken, tempCommand);
}
printf("bottom\n");
printf("currToken: %c \n", *currToken);
tempCommand++;
}
printf("out\n");
parserData.myChildProgramArguments = currToken;
return parserData;
}
答案 0 :(得分:4)
tempCommand
是一个联合char*
strcpy(tempCommand, command);
调用,导致分段错误,因为strcpy()
将写入不应该的地方。在致电tempCommand
之前为strcpy()
分配内存:
tempCommand = malloc(strlen(command) + 1); /* +1 for terminating null. */
if (tempCommand)
{
/* Use 'tempCommand' */
}
在不再需要时请记住free(tempCommand);
。
没有理由将*curToken
或*tempCommand
的值转换为char
,因为它已经是类型。
答案 1 :(得分:0)
您需要使用malloc动态地为tempCommand变量分配内存。
类似的东西:
tempCommand = malloc(sizeof(command));
这应该可以解决问题。祝你好运!