澄清一下,我是C编程的新手。
我有一个标记化函数,它的行为不像我期望的那样。我正在尝试从客户端传递的FIFO或命名管道中读取数据,这是服务器端。客户端读取文件并将其传递给FIFO。问题在于令牌化不会返回execvp可以处理它的格式,因为运行gdb告诉我在main()中调用execute函数失败。 (附加函数将char附加到字符串中)

最佳答案

一个错误是tokens既未初始化也不分配任何内存。

这是有关如何为tokens初始化和分配内存的示例:

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个令牌分配内存。如果内存分配失败,它将以非零的返回值结束程序以指示失败。

关于c - 使用strtok()的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46788708/

10-12 22:58