在C中使用char数组作为路径追加的open()系统调用?到文件名

时间:2013-10-03 02:41:57

标签: c file-io

我试图在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]);

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

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);
    ...
}               

我无法理解它是否与我传递路径名的方式有关,尝试重定向到stdin,或其他什么,而我无法确定问题究竟是什么。有没有人能指出我为什么会这样做?

1 个答案:

答案 0 :(得分:0)

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