Ошибка сегментации strcpy / strcat - PullRequest
0 голосов
/ 16 июня 2020

Я пишу программу для открытия файла (скажем, «input_file»), управления его содержимым, а затем вывода его в другой файл («Managed-input_file») следующим образом:

char t-filename[]="Manipulated-", filename[50], td-filename[50];
memset ( filename, '\0', FILE_NAME);

printf("Please enter the filename - \n");
scanf( "%30s", filename );
strcpy(td-filename,filename);
strcat(t-filename,td-filename);
printf("%s\n", t-filename);

Теперь функции printf выводят t-имя файла как «Manipulated-input_file»

После этой части у меня есть раздел, в котором я открываю «input_file» и что-то.

fptr = fopen(filename, "r");
while ( fgets (line, sizeof line, fptr) != NULL)
{
 ...do something...
}
fclose(fptr);

Позже я хотел открыть файл с именем 't-filename' в конце кода:

tptr = fopen(t-filename, "w");
fprintf(tptr,"something");
fclose(tpr); 

Когда я компилирую этот код, я получаю " Ошибка сегментации (дамп ядра) ".

Я не знаю, что пошло не так. Может кто-нибудь помочь?

Ответы [ 2 ]

4 голосов
/ 16 июня 2020

transfilename не имеет достаточно места для хранения дополнительных элементов, добавленных сюда strcat(transfilename,translatedfilename);. Он уже заполнен "Translated-", так как [] дает вам точное количество символов в инициализирующей строке плюс нулевой ограничитель.

Вам нужно либо изменить его на char transfilename [LARGE_ENOUGH], либо использовать динамический c выделение памяти для изменения размера во время выполнения.

2 голосов
/ 16 июня 2020

strcat(t-filename,td-filename);

t-filename недостаточно велик, чтобы вместить результат, и это неопределенное поведение.

здесь то же самое

strcat(transfilename,translatedfilename);

transfilename недостаточно велик, чтобы вместить результат, и это неопределенное поведение.

...