gpt4 book ai didi

c - 当我将标准输出传输到程序时出现段错误

转载 作者:行者123 更新时间:2023-11-30 15:28:11 25 4
gpt4 key购买 nike

我不知道是否需要再说一遍,但英语不是我的母语,而且我不是一个很好的学生,我看到你能够纠正我的信息,所以没关系,但我'我想再次道歉。

这是交易,我有一个程序,它将参数中传递的给定图形转换为 Dimacs 格式,我将存储在 .cnf 文件中。 (我们使用它通过 SAT 求解器来求解)

当我自己使用它时,他工作得很好,所以我想要另一个程序,graph_generator,我将通过管道将其输入到我的程序中以获得随机图形。

我已经制作了我的 graph_generator 程序,并且他以我想要的格式正确打印了图表,所以我基本上尝试做 ./graph_generator | ./myprogram 但我立即得到一个段错误,我不明白为什么,graph_generator 返回的正是它所期望的,当我想使用调试器时,我不明白如何知道我通过管道传输结果,当我复制粘贴 graph_generator myprogram 的结果正确生成了我的 .cnf 文件。

我不知道问题出在哪里,我有一个理论,但它有点蹩脚,那就是 graph_generator 的标准输出,一旦通过管道传输,我的程序就会将空间视为参数,并且存在问题。有人可以帮我吗?

int main (int argc, char* argv[]){
graph* mygraph;
int taille, nbEdge;
int i;
FILE* resultat;


printf("mark 1");
taille = atoi(argv[1]);
nbEdge = atoi(argv[2]);
printf("mark 2");
mygraph = build_empty_graph(taille);
for(i = 3; i < argc; i+= 2)
add_edge(atoi(argv[i]), atoi(argv[i+1]), mygraph);

resultat = fopen("resultat.cnf", "w");
write_result_comments(resultat);
write_result_header(resultat, mygraph);
write_first_stack(resultat, mygraph);
write_second_stack(resultat, mygraph);
fclose(resultat);

return 0;
}

这是我的程序的主要部分,当我将它与管道一起使用时,消息“mark1”甚至没有出现

最佳答案

这是段错误,因为您没有检查 argc 并且没有传递任何值作为参数。请注意,stdin 是与 argv 中的参数分开的流。

解决这个问题的最佳方法是分层构建:

分词器:使用 getchar 循环读取 stdin,直到到达空格(空格、制表符或换行符)。

解析器:atoi 很好,因为你只传递整数。

状态机:前两个参数为 taille 和 nbEdge,成对 (x, y) 调用程序。也许在循环中使用 switch 语句和状态变量。

程序:程序的其余部分几乎保持原样。

关于c - 当我将标准输出传输到程序时出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26700631/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com