Моя программа компилируется, но когда я запускаю его ./program -n 3 1000.txt
, я получаюОшибка сегментации 11?
ошибки сегментации: 11.
Что это значит?
Что делает моя программа: напечатайте первые 10 строк файла. Если файл имеет менее 10 строк, весь файл должен быть напечатан. Программа не должна создавать файлы. Он просто печатает часть содержимого файла на стандартный вывод.
Также должно быть указано, что печатается другое количество строк. Это будет указано путем передачи строки -n
в качестве первого аргумента программы, количества строк, которые будут напечатаны как второй аргумент, и файла в качестве третьего аргумента.
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char * argv[]){
int i, n;
char line[1024];
n = atoi(argv[2]);
if(argc == 2){ //eg ./program 1000.txt
FILE * fPointer;
fPointer = fopen("1000.txt", "r");
for(i = 1; i <= 10; i++){
fgets(line, 1024, fPointer);
fprintf(fPointer, "%s\n", line);
}
fclose(fPointer);
} else if(argc == 4){ //eg ./program -n 4 1000.txt
FILE * fPointer;
fPointer = fopen("1000.txt", "r");
for(i = 1; i <= n; i++){
fgets(line, 1024, fPointer);
fprintf(fPointer, "%s\n", line);
}
fclose(fPointer);
} else {
printf("Wrong number of inputs.\n");
}
return 0;
}
Ваша программа сделала что-то ОС не нравится. Вы уверены, что читаемый '1000.txt' существует в правильном пути? Добавление проверки, если 'fopen()' было успешным, хорошо. – MikeCAT
Это означает, что вы получаете доступ к памяти, которой не должно быть. Возможно, нулевой указатель? Используйте отладчик, чтобы узнать. PS: Проверьте страницу руководства для 'fopen', но не может возвращать' null' в случае, если файл не может быть открыт. –
Используйте отладчик, чтобы помочь вам найти проблему. И вы действительно должны добавить проверку ошибок в свой код. Это сделает ваш код более надежным, а также поможет вам отладить любые проблемы. – kaylum