Я пытаюсь создать простую программу для вставки текста в определенную позицию в существующем текстовом файле. Например, если в файле text.txt находится текст «образец текста», после запуска программы в файле text.txt должен быть текст «вставка текста в текст». Но иногда программа вставляет какие-то странные символы в конец текста, поэтому в этом случае я получил "saminserting textple textX €" (где почему-то стоит "X €" в конце текста), и я не могу понять, почему . Мой код:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main ( int argc, char *argv[] )
{
FILE *file;
file = fopen("text.txt", "rb+"); //processed file
if (file == NULL) return 0;
char *test = "inserting text"; //text for inserting
char *buffer;
int size;
fseek(file, 0L, SEEK_END);
size = ftell(file);
fseek(file, 3L, SEEK_SET);
buffer = malloc(abs(3L - size) + 1);
fread(buffer, abs(3L - size), 1, file);
fseek(file, 3L, SEEK_SET);
fwrite(test, strlen(test), 1, file);
fwrite(buffer, strlen(buffer), 1, file);
free(buffer);
fclose(file);
return 0;
}
Буду благодарен за любую помощь.
1 ответ
buffer = malloc(abs(3L - size) + 1);
fread(buffer, abs(3L - size), 1, file);
...
fwrite(buffer, strlen(buffer), 1, file);
Вы никогда не завершаете buffer
нулевым символом, поэтому потенциально вы пишете не то, что читаете. Сделайте это вместо этого. (Но на самом деле используйте size-3
или что-нибудь получше ...)
fwrite(buffer, abs(3L - size), 1, file);
Похожие вопросы
Новые вопросы
c
C - это язык программирования общего назначения, используемый для системного программирования (ОС и встраиваемых), библиотек, игр и кроссплатформенности. Этот тег следует использовать с общими вопросами, касающимися языка C, как это определено в стандарте ISO 9899 (последняя версия 9899: 2018, если не указано иное, а также для запросов, специфичных для версии, с c89, c99, c11 и т. Д.). C отличается от C ++ и не должен сочетаться с тэгом C ++ без разумной причины.
size -3
, аabs(3L - size)
?buffer
обнуляется?buffer
, а не о файле. Также файл является текстовым файлом.