1

我正在尝试在 C 中打开(并同时创建)一个文件,使用字符数组作为我传递的路径名,该路径名存储在节点结构中。当我这样做时,它会在文件名上附加一个问号。

指定文件名的数组定义如下:

#define MAX_LENGTH 1024
typedef struct node {
    ...
    char input[MAX_LENGTH]; // filename
    ...
}

当我最初将程序名称放在节点结构中时,我使用 makeargv 和 strcpy 如下:

char **strings;
makeargv(s,":",&strings);
strcpy(n->input,strings[2]);

当我打开文件时,我尝试将标准输入重定向到它,如下所示:

char **argumentList;
makeargv(nodes[i]->prog," ",&argumentList);
if (strcmp(nodes[i]->input, "stdin") != 0) {
    char* input = nodes[i]->input;
    int in = open(input, O_RDONLY);
    dup2(in, 0);
    int cl = close(in);
    ...
}               

我无法理解这是否与我传递路径名的方式、重定向到标准输入的尝试或其他原因有关,并且我无法弄清楚到底是什么问题..有人能指出我在正确的方向上为什么会发生这种情况?

4

1 回答 1

0

您没有包含用户输入的代码。确保它正确地传递输入 - 检查字符串末尾的任何非图形字符,并确保字符串以空字符结尾。

于 2013-12-24T06:46:35.830 回答