我必须写一个MPI c程序。虽然我添加了string.h,但我的编译器无法识别数据类型字符串。我想从命令行读取一个字符串并将其传递给下面给出的函数
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 :(得分:1)
而不是
find_rows(&file );
呼叫
find_rows(file );
file
已经是一个指针。您正在将指针的地址传递给函数。
然后在函数find_rows
中尝试打开无效文件并使用fp
进行操作,这是一个空指针,导致未定义的行为。
修改的
您的通话nvtxs = find_rows(argv[1] );
是正确的。问题是fp=fopen(file, "r");
可能无法打开文件,如果该文件不存在或无法找到该文件。