如何通过bash将文件中的一行作为参数传递给c程序?

时间:2019-05-05 23:20:52

标签: c bash

我有一个接受字符串作为参数的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;
}

1 个答案:

答案 0 :(得分:3)

段错误是由包含回车文字的输入文件引起的,而没有编写C程序来处理这种情况。

“歧义重定向”是由于传递带有空格的文件名而没有正确的引号引起的。始终引用您的扩展:<"$file",而不是<$file