C 使用strtok()的正确方法是什么?

C 使用strtok()的正确方法是什么?,c,named-pipes,strtok,fifo,C,Named Pipes,Strtok,Fifo,我只是想澄清一下,我是C编程的新手。 我有一个tokenize函数,它的行为与我期望的不一样。我试图读取客户端传递的FIFO或命名管道,这是服务器端。客户端读取一个文件并将其传递给FIFO。问题是tokenize没有返回execvp可以处理它的格式,因为运行gdb告诉我它在main()中调用execute函数失败。(append函数将字符追加到字符串中)一个错误是标记既没有初始化也没有分配任何内存 下面是一个关于如何初始化和分配令牌的内存的示例: char **tokenize(char *li

我只是想澄清一下,我是C编程的新手。
我有一个tokenize函数,它的行为与我期望的不一样。我试图读取客户端传递的FIFO或命名管道,这是服务器端。客户端读取一个文件并将其传递给FIFO。问题是tokenize没有返回execvp可以处理它的格式,因为运行gdb告诉我它在main()中调用execute函数失败。(append函数将字符追加到字符串中)

一个错误是
标记既没有初始化也没有分配任何内存

下面是一个关于如何初始化和分配
令牌的内存的示例:

char **tokenize(char *line){
    line = append(line,'\0');
    int i = 0, tlen = 0;
    char **tokens = NULL, *line2, *token, *delimiter;
    delimiter = " \t";
    token = strtok(line,delimiter);
    while (token != NULL) {
        if (i == tlen) {
            // Allocate more space
            tlen += 10;
            tokens = realloc(tokens, tlen * sizeof *tokens);
            if (tokens == NULL) {
                exit(1);
            }
        }
        tokens[i] = token;
        token = strtok(NULL, delimiter);
        i += 1;
    }
    tokens[i] = NULL;
    return tokens;
}

此代码将一次为10个令牌分配内存。如果内存分配失败,它将以非零返回值结束程序,以指示失败。

这是有问题的:
line=append(line,“\0”)追加()的作用是什么?
char**tokens
实际上指向什么内存?什么是
append
?看起来您试图将NUL字符添加到字符串中,但字符串已被NUL字符终止,否则它将不是字符串。。。。而且您从未初始化
令牌
。您正在正确使用
strtok()
。但是,您的代码中还有其他错误,例如,
令牌
未初始化。我确实初始化了令牌。。。很抱歉,我没有看到任何
令牌的初始化(末尾有一个
s
。@sam您的代码中可能还有其他几个bug。找到并修复它们对于你学习C.@sam的探索来说是一个很好的实践,如果你是为了测试而这么做的话:可能吧。如果你做的是交上来的练习:也许吧。询问你的教授/老师关于在完成任务时使用互联网资源和外部帮助的学校政策。如果你这样做是为了锻炼而不需要上交:不。