我有一个接受字符串作为参数的c程序。作为参数输入的字符串是文件的一行,因此例如我的一个文件包含以下内容:
0410000340000230
1111111111111111
1800400700032050
到目前为止,我已经编写了一个bash脚本来使工作自动化:
#!/bin/bash
read -p "make clean"
make clean
read -p "make"
make
file=$1
while read line; do
echo $line
done < $file
到目前为止,太好了。现在,我想将echo $ line命令的输出用作程序的参数。我尝试过:
echo $line | ./program
echo $line > ./program
echo $line < ./program
./program < echo $line
有时候,这只会给我一个错误,即我的程序没有参数,而有时它会出现分段错误。
有人可以告诉我我在做什么错吗?
主程序的C代码:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
#include "functions.h"
int main(int argc, char * argv[])
{
if (argc != 2)
{
printf("Usage: ./Sudoku <Sudoku en une seule ligne. Represantation des cases vides avec 0>\n");
return 0;
}
FILE *f, *g;
int n, n_clauses, ** Sudoku;
n = (int) sqrt((double) strlen(argv[1]));
if (ceil(sqrt((double) strlen(argv[1]))) == sqrt((double) strlen(argv[1])))
{
Sudoku = (int **)malloc(n * sizeof(int *));
for (int i = 0; i < n; i++)
{
Sudoku[i] = (int *)malloc(n * sizeof(int));
}
remplir_sudoku(argv[1], n, Sudoku);
}
else
{
n = (int) sqrt((double) find_sudoku_length(argv[1]));
printf("\n %d\n", n);
Sudoku = (int **)malloc(n * sizeof(int *));
for (int i = 0; i < n; i++)
{
Sudoku[i] = (int *)malloc(n * sizeof(int));
}
remplir_sudoku_v2(argv[1], n, Sudoku);
}
afficher_sudoku(Sudoku, n);
n_clauses = nb_clauses(n);
n_clauses = n_clauses + nb_remplis(Sudoku, n);
f = fopen("CNF", "w");
fprintf(f, "c CNF\n");
fprintf(f, "p cnf %d %d\n", n*n*n, n_clauses);
transformer_en_cnf(f, Sudoku, n);
fclose(f);
return 0;
}
答案 0 :(得分:3)
段错误是由包含回车文字的输入文件引起的,而没有编写C程序来处理这种情况。
“歧义重定向”是由于传递带有空格的文件名而没有正确的引号引起的。始终引用您的扩展:<"$file"
,而不是<$file
。