c - C segfault - off-by-one - 大小为 1 的无效写入
问题描述
我在 C 中的内存分配方面遇到了一些问题。
我似乎总是在这里写或读到错误的地方,可能我在这里遗漏了一些东西:
char *a = malloc(8+b+1+c+1+d+1+e+1+f+4+6);
*(a+8+b+1+c+1+d+1+e+1+f+4+6) = '\0';
snprintf(a, strlen(a), "xyz \"%sx%sx%sx%sx%s\" ",v, w, x, y, z);
谁能帮我回到正轨?
解决方案
我不知道这些变量是什么,但我认为这一行是错误的:
*(a+8+b+1+c+1+d+1+e+1+f+4+6) = '\0';
试试这个:
*(a+8+b+1+c+1+d+1+e+1+f+4+6-1) = '\0';
写入字符串的末尾需要您从长度中减去一个以获取最后一个字节的索引。
根据 v、w、x、y 和 z 的字符串长度,您还可能在使用snprintf
.
推荐阅读
- c# - 错误 CS0029 无法将类型“Microsoft.AspNetCore.Mvc.ActionResult”隐式转换为“System.Collections.Generic.List<>”
- php - 如何从 Python 运行 php 代码字符串?
- xml - Spark DataFrame 到 xml 文件
- c# - xamarin 主从页面 CS0102 nand CS0229
- ios - iOS 在前台推送通知 - 检测通知的横幅何时被用户忽略
- julia - 替换数组中的特定元素也更改其他元素
- flutter - 如何去除 Flutter Widget 上 TextField 的背景颜色?
- raku - 滑动散列和 slurpy 自动变量的默认值
- api - InputPhoneContact 没有 len()
- javascript - 将文件放入驱动器 API v3