给出以下代码
char str[200];
str[0] = '\0';
double averrage[NUMBER_INPUTS];
for (int i = 0; i < NUMBER_INPUTS; i++) {
...
sprintf(str, "%s%.3f;", str, averrage[i]);
}
我想了解sprintf,但我不能。特别是因为变量str
。
我希望任何人都可以帮助我,理解。
答案 0 :(得分:3)
sprintf(str, "%s%.3f;", str, averrage[i]);
是未定义的行为。
使用sprintf()
,尝试读取和写入相同的指针str
会导致代码错误。
...如果在重叠的对象之间进行复制,则行为未定义 C11dr§7.21.6.62
连接的示例构思如下。
char str[200];
str[0] = '\0';
char *p = str;
double averrage[NUMBER_INPUTS];
for (int i = 0; i < NUMBER_INPUTS; i++) {
int n = sprintf(p, "%.3f;", averrage[i]);
if (n < 0) break;
p += n;
}
puts(str);
需要其他代码来防止str
溢出。考虑snprintf()
。