Я пытаюсь создать функцию, которая добавляет !!
в самом конце каждой строки из (включительно) -to (эксклюзивного) текстового файла. После нескольких осложнений мне действительно удалось. Но не совсем.Нежелательные пробелы в выходном файле
int incldue_auto (char *script, unsigned int offsetLine, unsigned int endLine)
{
size_t fileSize;
size_t content = (endLine - offsetLine) * 3; // New characters
char *buffer;
FILE* fp;
if((fp = fopen(script, "r")) == NULL) //return(1);
if(fseek(fp, 0l, SEEK_END) != 0) //return(2);
if((fileSize = ftell(fp)) == (-1l)) //return(3);
if(fseek(fp, 0l, SEEK_SET) != 0) //return(2);
if((buffer = calloc(fileSize + content, sizeof(char))) == NULL) //return(4);
if(fread(buffer, sizeof(char), fileSize, fp) != fileSize) //return(5);
if(fclose(fp) == EOF) //return(6);
{
int i, i2;
int lines = 0, ln = 0;
for(i = 0; i < fileSize; i++)
{
if(ln >= (endLine - offsetLine) || i[buffer] == '\0') break;
if(i[buffer] == '\n')
{
lines++;
if(lines >= offsetLine && lines < endLine)
{
char* p = (buffer + i); // \n
//if(*(p - 1) == '\n') continue;
memmove(p + 3,
p,
strlen(p)); // <-- Problematic line (I think)
memcpy(p, " !!", 3);
i += 3;
ln++;
}
}
}
fp = fopen(script, "w");
fwrite(buffer, fileSize + content, sizeof(char), fp);
fclose(fp);
}
free(buffer);
return 0;
}
Это относительно прекрасно работает, за исключением того, что он не добавляет к последней строке. И он заполняет текстовый файл пробелами (возможно, NULL) в конце. Я думаю, это потому, что я также перемещение enzero-е изд дополнительная площадь content
с этим:
memmove(p + 3,
p,
strlen(p)); // <-- Problematic line (I think)
Так, может быть, мне нужно, чтобы выяснить, что соответствующая формула, я должен использовать для того, чтобы сделать это Работа. Любые идеи о том, как сделать эту работу?
Предположительно, это означает, что ваш старый вопрос [Добавление символов в конце определенного диапазона строк в файле] (http://stackoverflow.com/questions/32132572/appending-characters-at-the-end- of-a-specific-range-of-lines-in-a-file) больше не актуально. Удалите его. –
Я предлагаю вам использовать двоичный режим для ваших файлов: 'fopen (...," ... b ")' – pmg
@pmg он вообще не работает в двоичном режиме (данные преобразуются в unsigned char) – Malina