【问题标题】:strtok_s ignors first charactersstrtok_s 忽略第一个字符
【发布时间】:2021-07-24 13:44:31
【问题描述】:

我正在尝试获取四个变量名的输入。

我会在每个strtok_s 之后进行检查,看看我得到了什么,但第一个单词只在 4 个字符之后才算。

我的代码:

void zeros()
{
    char buffer[81];
    fgets(buffer, sizeof(buffer), stdin);
    printf("%s\n", buffer);
    char *command = strtok_s(buffer, " \t", &buffer);
    printf_s("the command you selcted is %s\n", command);
    char *Matname = strtok_s(NULL, " \t", &buffer);
    printf_s("the name you selcted is %s\n", Matname);
    char *row = strtok_s(NULL, "  \t", &buffer);
    printf_s("the rowsize you selcted is %s\n", row);
    char *col = strtok_s(NULL, " \t", &buffer);
    printf_s("the colsize you selcted is %s\n", col);
    return 0;
}

【问题讨论】:

    标签: c char strtok


    【解决方案1】:

    strtok_s的最后一个参数不正确,应该是strtok_s用来存储其内部状态的指针。

    你的函数应该看起来更像这样:

    void zeros() // or int zeros() if it's supposed to return int
    {
        char buffer[81];
        char *ptr;
        fgets(buffer, sizeof buffer, stdin);
        printf("%s\n", buffer);
        char *command = strtok_s(buffer, " \t", &ptr);
        printf_s("the command you selcted is %s\n", command);
        char *Matname = strtok_s(NULL, " \t", &ptr);
        printf_s("the name you selcted is %s\n", Matname);
        char *row = strtok_s(NULL, "  \t", &ptr);
        printf_s("the rowsize you selcted is %s\n", row);
        char *col = strtok_s(NULL, " \t", &ptr);
        printf_s("the colsize you selcted is %s\n", col);
        // return 0; // if function return type is int
    }
    

    另一个问题,尽管不是主要问题,是函数具有void 返回类型并返回int

    【讨论】:

    • 我想稍后通过在行和列上使用 strtol 获取 int 大小来获取 int。我不明白你为什么使用另一个名为 *ptr 的 char var。编辑:它工作!非常感谢你:)
    • 不不,我需要制作一个大型终端,当用户输入由命令、矩阵名称和矩阵大小组合的输入时,函数 zeros 是一个函数。我有“大”字符串,并且知道我想再添加几行代码,我将获得行和列的 int 大小。打印功能是为了确定程序得到了什么。
    • @YuvalGrimberg 好的,祝你好运,如果您还有任何问题,我们随时为您提供帮助。
    • 我继续我的项目,并对代码进行了一些更改,我在最后添加了 strtol,这样我将获得 2 个字符和 2 个整数。由于某种原因,两个整数(行和列)是usubale,两个字符变量正在被删除。你知道为什么吗?
    • @YuvalGrimberg,没有代码很难说,这些是指针,如果你重新评估它们之前指向的数据就会丢失。您不能在 C 中返回多个不同的值,您可以创建指针参数并将这些值分配给指针,以便调用者保留它们,或者创建一个具有 2 个字符和 2 个整数的结构,然后返回 check this post for一些关于如何做到这一点的说明,如果你仍然不能,用你的代码提出一个新问题。
    猜你喜欢
    • 2014-06-05
    • 1970-01-01
    • 1970-01-01
    • 2021-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-27
    • 1970-01-01
    相关资源
    最近更新 更多