首页 > 解决方案 > 如何调整由函数创建的 char 数组中的内存大小?

问题描述

标签: carraysmemory-management

解决方案


使用printf("buffer: %s\n\n", buffer);,"%s"需要buffer指向一个字符串。在 OP 的情况下,它不是,因此是 UB(额外的垃圾打印)。


如果可以知道长度,只需打印fwrite()

fwrite(buffer, 1, file_length, stdout);

或者因为buffer肯定不是字符串,代码可以使用以下 if file_length < INTMAX

printf("%.*s", (int) file_length, buffer);

更改read_string_from_file()字符串。附加一个空字符

// buffer = malloc (file_length);
buffer = malloc (file_length + 1);
if (buffer) {
  fread (buffer, 1, file_length, file);
  // add
  buffer[file_length] = '\0';
  ...
  printf("buffer: %s\n", buffer);

没有空字符buffer就不是字符串


另外:健壮的代码也会检查结果ftell(), fread()


推荐阅读