【问题标题】:strtok() - what am I doing wrong?strtok() - 我做错了什么?
【发布时间】:2021-04-14 10:57:03
【问题描述】:

我为测试目的编写了一个小程序。我希望它输出以下内容:

Geeks
for
Geeks;var1=d;key=value

查看代码:

#include "header.h"

int fill_cmd_list(char *orig, char *token)
{
        token = strtok(orig, token);
        while (token != NULL) {
                printf("%s\n", token);
                token = strtok(NULL, token);
        }
}

void main(int argc, char *argv[])
{
        char *str,*trenner;
        trenner=malloc(sizeof(char)*2);
        strcpy(trenner,"-");
        str = malloc(sizeof(char)*1000);
        strcpy(str,"Geeks-for-Geeks;var1=d;key=value");
        fill_cmd_list(str,trenner);

        return;
}

它编译得很好,但输出是:

Geeks
for-
eeks;va
1=d
key
valu

我在这里错过了什么?

【问题讨论】:

    标签: c c-strings string-parsing


    【解决方案1】:

    我混淆了函数参数,不应该分配给令牌本身。

    以下代码按预期运行良好:

    #include "header.h"
    
    
    int fill_cmd_list(char *orig, char *trenner)
    {
            char *token;
            token = strtok(orig, trenner);
            while (token != NULL) {
                    printf("%s\n", token);
                    token = strtok(NULL, trenner);
            }
    }
    
    void main(int argc, char *argv[])
    {
            char *str,*trenner;
            trenner=malloc(sizeof(char)*2);
            strcpy(trenner,"-");
            str = malloc(sizeof(char)*1000);
            strcpy(str,"Geeks-for-Geeks;var1=d;key=value");
            fill_cmd_list(str,trenner);
    
            return;
    }
    

    【讨论】:

    • 您不需要trenner 变量,fill_cmd_list(str, "-"); 可以正常工作。虽然不是标准的,但大多数系统都有strdup 功能,可以为您执行mallocstrcpy。所以str =strdup("Geeks-.....");
    猜你喜欢
    • 2011-06-01
    • 1970-01-01
    • 2021-04-19
    • 2017-03-13
    • 2017-01-18
    • 2013-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多