使用格式为

时间:2015-08-11 21:32:03

标签: c

给出以下代码

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

我希望任何人都可以帮助我,理解。

1 个答案:

答案 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()