C-如何以可变数量的单词来表示输入



在这里,我正在尝试以用户输入为代价。load sml.txt。加载命令正常工作,因为它具有2个令牌,但是如果我尝试使用诸如display之类的单词输入,它会崩溃并给我一个segfault。我之所以认为是因为第二个令牌是无效的,但是我不知道如何绕过这个问题。你能帮忙吗?

对于您的参考command_load =" load"和command_display =" display"。

int main(int argc, char **argv)
{
    AddressBookList *addressBookList;
    char input[BUFSIZ];
    char load[BUFSIZ];
    char fileN[BUFSIZ];
    char *fileName;
    char *token;
    showStudentInformation();
    do
    {
        printf("Enter your command: n");
        fgets(input, sizeof(input), stdin);
        input[strlen(input) - 1] = '';
        token = strtok(input, " ");
        strcpy(load, token);
        token = strtok(NULL, " ");
        strcpy(fileN, token);
        fileName = fileN;
        if (strcmp(load, COMMAND_LOAD) == 0)
        {
            addressBookList = commandLoad(fileName);
        }
        else if (strcmp(load, COMMAND_UNLOAD) == 0)
        {
            /*commandUnload(fileName);*/
        }
        else if (strcmp(load, COMMAND_DISPLAY) == 0)
        {
            if (fileN == NULL)
            {
                printf("> No file loaded");
            }
            else
            {
                commandDisplay(addressBookList);
            }
        }
        else
        {
            printf("> Invalid inputnn");
        }
    } while (strcmp(load, COMMAND_QUIT) != 0);
    return EXIT_SUCCESS;
}

strtok()返回NULL如果没有更多令牌,您可以检查此功能。如果没有令牌,我通过将''分配给第一个字符来清空目标字符串,而不是调用strcpy()

do
{
    printf("Enter your command: n");
    fgets(input, sizeof(input), stdin);
    token = strtok(input, " n");
    if (token) {
        strcpy(load, token);
    } else {
        load[0] = '';
    }
    token = strtok(NULL, " n");
    if (token) {
        strcpy(fileN, token);
    } else {
        fileN[0] = '';
    }
    ...
} while (strcmp(load, COMMAND_QUIT) != 0);

也无需用替换字符串中的最后一个字符。只需在strtok()定界符中包含n,因此它不会在令牌末端包含newline。

相关内容

  • 没有找到相关文章

最新更新