所以我试图使用这个函数读取整个文本文件:
FILE *fp = fopen(path, "r");
fseek(fp, 0, SEEK_END);
int tamanioArchivo = sizeof(char) * ftell(fp);
fseek(fp, 0, SEEK_SET);
char* archivo = malloc(tamanioArchivo + 1);
fread(archivo, tamanioArchivo + 1, 1, fp);
//do something with archivo
fclose(fp);
free(archivo);
Run Code Online (Sandbox Code Playgroud)
我调试了它,问题似乎就fread行了。它带回文件并在最后添加一些垃圾。任何想法我做错了什么?
通常 C不关心文件的内容是什么。无论是文本数据还是二进制数据,都以相同的方式读取。意思是如果你想读取一个字符串并得到一些很好的以 null 结尾的东西,你需要自己处理。
fread(archivo, tamanioArchivo+1, 1, fp);
Run Code Online (Sandbox Code Playgroud)
这会读取一个额外的字节(同样,空终止是 C 语言,文件系统不会强制执行此操作)。去掉加号 1。然后你必须确保它是空终止的:
archivo[tamanioArchivo] = '\0';
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2615 次 |
| 最近记录: |