【发布时间】:2018-10-26 22:24:38
【问题描述】:
编辑:如果我们有这个呢
char value_arr[8];
// value_arr is set to some value
snprintf(value_arr, 8, "%d", *value_arr);
这种行为是否已定义?
假设我有一些笨拙的原因
char value_arr[8];
// value_arr is set to some value
int* value_i = reinterpret_cast<int*>(value_arr);
snprintf(value_arr, 8, "%d", *value_i); // the behaviour in question
是否有保证,例如,如果*value_i = 7,那么value_arr 将采用“7”的值。是否定义了这种行为?这样value_i首先被取消引用,然后按值传递,然后格式化,然后存储到数组中。
通常情况下,*value_i 的值预计不会改变,但将字符串存储到 value_arr 会违反这一点。
当我测试它时,它似乎按预期运行,但我似乎无法在文档中找到明确的答案。函数签名有...,据我所知与va_list有关,但恐怕我对可变参数函数的工作方式不是很了解。
int sprintf (char* str, const char* format, ... );
【问题讨论】:
-
可能是 XY 问题。
-
可能不是 XY 问题,因为我只是出于好奇。
标签: c++ printf language-lawyer undefined-behavior