为了澄清,我是C编程的完全新手。 我有一个tokenize函数,它的行为不像我期望的那样。我试图读取客户端传递的FIFO或命名管道,这是服务器端。客户端读取文件并将其传递给FIFO。问题是tokenize没有返回execvp可以处理它的格式,因为运行gdb告诉我它在调用main()中的execute函数时失败了。 (append函数将字符串附加到字符串中)
答案 0 :(得分:1)
一个错误是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个令牌分配内存。如果内存分配失败,它将以非零返回值结束程序以指示失败。