Здесь много ошибок.
После звонка fopen()
, вы должны проверить, pf
is NULL
, потому что fopen()
может потерпеть неудачу.
Вы пытаетесь открыть файл с именем filename+.txt
. Разве вы не должны открывать файл, который был указан в качестве параметра?
Кроме того, структура main()
должна быть int main(int argc, char **argv)
, вы не можете делать все, что хотите.
Проверьте, есть ли argc > 1
, и в этом случае программа была запущена с параметрами, а имя файла должно быть указано в argv[1]
.
Update на комментарии: Это как ваш код должен выглядеть следующим образом:
int main()
{
char filename[512]; // reserve 512 bytes to receive the file name from input
FILE *pf;
int ii;
int jj;
printf("Enter file name: ");
scanf("%s", filename);
pf = fopen(filename, "r");
if (pf)
{
fscanf(pf,"%d,%d", &ii, &jj);
printf("%d,%d\n", ii, jj);
fclose(pf);
}
else
{
printf("Failed to open file name %s", filename);
}
return 0;
}
Вы также можете сделать это, чтобы получить имя файла из параметров:
int main(int argc, char **argv)
{
FILE *pf;
int ii;
int jj;
if (argc > 1)
{
pf = fopen(argv[1], "r");
if (pf)
{
fscanf(pf, "%d,%d", &ii, &jj);
printf("%d,%d\n", ii, jj);
fclose(pf);
}
else
{
printf("Failed to open file name %s", argv[1]);
}
}
else
{
printf("Insuficient parameters");
}
return 0;
}
Или даже, если вы не «т хочет передать расширение файла:
int main(int argc, char **argv)
{
char *filename;
FILE *pf;
int ii;
int jj;
if (argc > 1)
{
filename = malloc(strlen(argv[1]) + 5); // alloc necessary memory
strcpy(filename, argv[1]);
strcat(filename, ".txt");
pf = fopen(filename, "r");
if (pf)
{
fscanf(pf, "%d,%d", &ii, &jj);
printf("%d,%d\n", ii, jj);
fclose(pf);
}
else
{
printf("Failed to open file name %s", filename);
}
}
else
{
printf("Insuficient parameters");
}
return 0;
}
У вас есть полностью неправильная подпись основного метода – rpeshkov
В fopen первым параметром должно быть имя файла, нет "и другие корректировки, которые вы вводите. Как есть, вы ожидаете ошибку сегментации. – gnometorule
И как у вас есть это сейчас, ваш последний абзац не описывает, как вы будете использовать эту программу: вместо этого просто введите ./readfile, если вы скомпилировали его под этим именем (без параметра командной строки cmd). – gnometorule