c - 使用 sprintf 时大小为 1 的 char 数组的空终止
问题描述
我在大小为 1 的 char 数组上执行 sprintf 并且代码工作正常。即 strlen 返回 1 即使它可能不是以空值终止的。据我了解 sprintf 将执行空终止,但是在这种情况下它没有足够的空间。有人可以解释它起作用的原因吗?
#include <stdio.h>
#include <string.h>
#define STATUS "1"
int main(void){
char *data = malloc(1);
sprintf(data, "%s", STATUS);
printf(">%s<\n", data);
printf(">%d<\n", strlen(data));
}
输出
>1<
>1<
解决方案
该程序具有未定义的行为。
它之所以起作用,是因为通常 malloc 分配内存块的倍数是段落大小等于 16 或其他一些实现定义的值。
推荐阅读
- angular - 无法解析组件 Webpack4 的所有参数
- scikit-learn - 为 PCA 缩放 one-hot 编码变量
- visual-studio-2017 - 如何在 Visual Studio 2017 中查找和使用新的语法高亮主题
- java - 如何处理背压法
- vb.net - 用于 vb.NET 的 MaskedTextBox 的 PromptChar 将提示显示为 mm:ss
- spring-boot - Spring boot - 自动装配依赖项时找不到Bean
- python - cx_oracle python 迭代
- c# - 为什么我无法配对我的 BLE 设备?
- php - How to convert Pdf file to byte array in php and send?
- php - PHPMailer 不发送邮件