c - 如何调整由函数创建的 char 数组中的内存大小?
问题描述
解决方案
使用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()
。
推荐阅读
- vue.js - Axios 和 FW/1 无法使用标头(CORS 错误)
- node.js - MongoDB 和 NodeJs 的时区问题
- android - 生成 singed apk 失败
- c# - RS-232 不稳定行为 - 跟进
- python - 使用 PySpark 的雪花 ETL 作业可在本地工作,但不能在 Dataproc 上工作
- maven - 我可以将 Chromedriver 集成到不需要将其放入本地计算机的 Maven 项目中吗?
- laravel - 如果 VueJS 组件没有绑定到 DOM 元素,它们会使用多少内存?
- python - Scrapy:twisted.internet.error.ReactorNotRestartable 从运行 CrawlProcess()
- vue.js - VUE - 在 v-for 完成循环后调用函数
- bash - 在上下文中使用“-”有什么用:“echo $$ $BASHPID | cat -”?重击