2

我正在尝试编写一个一次解析字符串(a 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;
   }
4

2 回答 2

4

tempCommandchar*

strcpy(tempCommand, command);

被调用,导致分段错误,因为strcpy()它将写入不应该写入的地方。tempCommand在调用之前分配内存strcpy()

tempCommand = malloc(strlen(command) + 1); /* +1 for terminating null. */
if (tempCommand)
{
    /* Use 'tempCommand' */
}

记住free(tempCommand);在不再需要时。

没有理由将*curTokenor的值*tempCommand转换为 a char,因为它已经是类型。

于 2012-10-21T09:38:26.453 回答
0

您需要使用 malloc 为 tempCommand 变量动态分配内存。

就像是:

tempCommand = malloc(sizeof(command));

这应该可以解决问题。祝你好运!

于 2012-10-21T09:41:20.213 回答