Почему эта простая функция вызовет ошибку seg?
int main(int argc, char** argv) {
FILE* file1;
file1 = fopen(argv[argc + 1], "wt");
fclose(file1);
}
Почему эта простая функция вызовет ошибку seg?
int main(int argc, char** argv) {
FILE* file1;
file1 = fopen(argv[argc + 1], "wt");
fclose(file1);
}
Ваш fopen() не может открыть файл, поэтому fp имеет значение NULL, поэтому fclose() законно возражает, вылетая. Проверьте возврат от fopen().
Кроме того, по определению argv[argc] == 0 и argv[argc+1] находятся за концом массива. На практике в Unix-системах это часто будет name=value первой переменной окружения, но вряд ли это действительное имя файла и уж точно оно не было получено законным путем.
Если ваша программа вызывается как:
./a.out file.txt
тогда имя файла argv[1]; строка, на которую указывает argv[0], является именем программы, a.out дает или принимает информацию о пути, а argc == 2 и argv[2] == 0. Не забудьте проверить этот argc == 2 перед попыткой открыть файл.
Всегда проверяйте статусы возврата, особенно из функции «заведомо неудачная», такой как fopen(). И напечатайте имя, которое вы открываете — оно многое рассказало бы вам о вашей проблеме — после проверки того, что argc установлено на ожидаемое вами значение.
Вы получаете доступ к двум элементам после последнего элемента argv. Вы также не проверяете возвращаемое значение fopen(), оба могут вызвать ошибку сегментации.
argv[]? - person Dan Fego   schedule 28.02.2012argc— это количество элементов вargv[], поэтомуargvсодержит допустимые элементы от0доargc-1. - person Dan Fego   schedule 28.02.2012argv[1]- person datenwolf   schedule 28.02.2012