【问题标题】:Confusion using strtok使用 strtok 混淆
【发布时间】:2012-01-29 01:37:02
【问题描述】:

我正在使用strtok 并且有点困惑。

我有一个包含很多字符串的数组,我想将这些字符串标记为一个临时数组。当我执行 strtok 时,它将第一个令牌存储在临时数组中,但也更改了原始数组值。所以我很困惑。

char cmdTok[10] , *cmd = cmdTok;
printf("command[0] = %s\n", commands[0]);
cmd = strtok(commands[0], " \n\0");
printf("command[0] after strtok = %s\n", commands[0]);

输出存在

command[0] = #Draw A Ring
command[0] after strtok = #draw

如何在命令中保留原始值?

【问题讨论】:

    标签: c strtok


    【解决方案1】:

    在字符串的副本上执行strtok

    char *copy = strdup(commands[0]);
    cmd = strtok(copy, " \n");
    /* ... */
    
    free(copy);
    

    如果你没有/想用strdup

    char *copy = malloc(strlen(commands[0]) + 1);
    strcpy(copy, commands[0]);
    /* ... */
    

    【讨论】:

      【解决方案2】:

      strtok 修改其输入。

      这是一个糟糕的旧功能。对不起。

      如果您既想保留原始文件又想调用strtok(而不是strstr 或其他类似的替代方法),则必须在第一次调用之前复制字符串。

      【讨论】:

        猜你喜欢
        • 2020-08-10
        • 2012-06-24
        • 2021-08-10
        • 2013-02-19
        • 2023-02-04
        • 1970-01-01
        • 2012-08-30
        • 2019-12-08
        • 1970-01-01
        相关资源
        最近更新 更多