【问题标题】:Weird symbols on end when inserting text into a file将文本插入文件时出现奇怪的符号
【发布时间】:2014-03-06 22:33:36
【问题描述】:

我正在尝试制作一个简单的程序,用于在现有文本文件的特定位置插入一些文本。例如,如果在文件 text.txt 文本“示例文本”中,则运行程序后应该在 text.txt 中“saminserting textple text”。但有时程序会在文本末尾插入一些奇怪的符号,所以在这种情况下,我得到“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;
}

如果有任何帮助,我将不胜感激。

【问题讨论】:

  • 为什么不是size -3 而不是abs(3L - size)
  • buffer nul 终止了吗?
  • @BLUEPIXY,好吧,只有当文件包含一个以空字符结尾的字符串时。这是最不可能的。
  • @Roddy 我说的是buffer,而不是文件。文件也是文本文件。
  • @BLUEPIXY。确切地说:缓冲区永远不会写入空值。它只是从文件中填充的。 (虽然不太可能,但文本文件可能包含空值......)

标签: c fseek


【解决方案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);

【讨论】:

    猜你喜欢
    • 2017-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多