我一直在与恐惧作斗争。尽管我添加了字符串结尾字符“\0”,但有时字符串结尾处会有一个随机字符。
这是我的代码。
#include <inttypes.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
uint8_t get_acks(char ** acks);
int main(){
...
char *acks = NULL;
uint8_t r = get_acks(&acks);
// test r ...
}
uint8_t get_acks(char ** acks){
FILE *fp;
fp = fopen(FILENAME, "r");
// test fp
fseek(fp, 0, SEEK_END);
long len = ftell(fp);
fseek(fp, 0, SEEK_SET);
*acks = malloc(sizeof(char)*(len+1));
fread(*acks, sizeof(char), len, fp);
acks[len-1] = '\0';
printf("acks in get_acks: %s", *acks);
return 0;
}
我也尝试过 *acks[len-1] = '\0' 但程序崩溃了(从那时起没有打印任何内容)
这里有一个输出示例:
acks in get_acks: 1, 2, 3, 4 09:09▒
这是文件内容:
cat new_acks.txt: 1, 2, 3, 4
最佳答案
acks 是双指针,保存来自 main 的 acks 地址
你需要改变
acks[len - 1] = '\0';
至
(*acks)[len] = '\0';
因此,您在 get_acks 中分配的缓冲区最后会得到\0
关于c - fread 在c中用随机字符填充字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43843920/