我一直在为恐惧而挣扎。即使我添加了字符串字符'\ 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',但是程序崩溃了(从那时开始什么都没有打印)

这里有一个输出示例:


  在get_acks中打个电话:1、2、3、4 09:09▒


这是文件内容:


  猫new_acks.txt:
  1 2 3 4

最佳答案

Acks是双指针,它保存来自主站的Ack地址

你需要改变

acks[len - 1] = '\0';




(*acks)[len] = '\0';


这样,您在get_acks中分配的缓冲区将在末尾得到\ 0

09-28 05:18