2013-04-22 96 views
0

我必须编写一个MPI c程序。尽管我已经添加了string.h,但我的编译器不能识别数据类型字符串。我想读通过命令行的字符串,并将其传递到下面从MPI中的命令行参数读取字符串c

int find_rows(char * file) 
{ 
    int length=0; 
    char buf[BUFSIZ]; 
    FILE *fp; 
    fp=fopen(file, "r"); 
    while (!feof(fp)) 
    { 
     // null buffer, read a line 
     buf[0] = 0; 
     fgets(buf, BUFSIZ, fp); 
     // if it's a blank line, ignore 
     if(strlen(buf) > 1) 
     { 
      ++length; 
     } 

    } 
    fclose(fp); 
#ifdef DEBUG 
    printf("lFileLen = %d\n", length); 
#endif 
return length;  

} 

给这个函数的功能时,我有

char file[50] = "m5-B.ij"; 

,然后作品叫

nvtxs = find_rows(&file); 

,但给我给分段错误

nvtxs = find_rows(argv[1]); 

有人可以帮忙吗?

+0

您是否将参数传递给'main()'?检查'fopen()'的返回值。 – hmjd 2013-04-22 08:01:42

+0

是的。我可以使用fprintf或sscanf读取并打印argv [1]的值。我只是不能将它传递给函数 – LGG 2013-04-22 08:09:30

回答

1

而不是

find_rows(&file); 

呼叫

find_rows(file); 

file已经是一个指针。您正在将指针的地址传递给该函数。

在之后的一个功能find_rows试图打开无效的文件,并与fp这是一个空指针导致未定义行为操作。

编辑

您的通话nvtxs = find_rows(argv[1]);是正确的。问题是fp=fopen(file, "r");可能无法打开该文件,如果该文件不存在或无法找到该文件。

+0

该程序在我通过时工作 find_rows(&file); 但我不想硬编码文件名。我想使用argv从命令行获取它。我无法做到这一点 – LGG 2013-04-22 08:02:27

+0

@Lopez,你的'&file'是指向指针的指针!你错了。 – 2013-04-22 08:07:34

+1

@Lopez检查'fopen(file,“r”);'是否返回NULL。 – 2013-04-22 08:10:23