0

我必须编写一个 MPI c 程序。尽管我添加了 string.h,但我的编译器无法识别数据类型 string。我想从命令行读取一个字符串并将其传递给下面给出的函数

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] );

有人可以帮忙吗?

4

1 回答 1

1

代替

find_rows(&file );

称呼

find_rows(file );

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

然后稍后在函数中,find_rows您尝试打开无效文件并对其进行操作,这是一个导致未定义行为fp的空指针 。

编辑

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

于 2013-04-22T07:59:48.237 回答