【发布时间】:2019-06-21 15:28:43
【问题描述】:
函数应该返回 float 类型的 printf 值 char str*
输入:
char *string = "%f";
float k = 1.0005325678910
功能:
我的函数将输入字符串%f 和浮点值1.0005325678910
作为输入,将printf 的值存储在char *answer 中。这里我无法为char *answer 分配内存
int length(char* string){
int i = 0;
while (string[i] != '\0')
i++;
return i;
}
char *res(char *string, float k){
int len = length(string); //len is a function which return length of the string
char *answer = (char*)malloc(sizeof(char)*len);
sprintf(answer,format, n);
//printf("%05d", 50);
//printf("%s", sqlAnswers);
return answer;
}
预期输出:
char *output = 1.000532;
错误:
将内存分配给char *answer
输出:1.000533
我的代码不应四舍五入。
编辑:
例如:如果我的 float k = 6.143211 则 预期输出 应该是 6.14 但函数 returns 6.15 会将最后一位数字舍入。
【问题讨论】:
-
你忘记了 C 中的
char字符串实际上称为 null-terminated 字节字符串。而且您还需要为 null-terminator 留出空间。 -
至于您的问题,请尝试创建一个合适的minimal reproducible example 向我们展示。阅读how to ask good questions 和this question checklist。任何地方都没有问题,没有关于你的“错误”的解释,或者你展示的代码会发生什么,或者应该发生什么。等等。
-
您假设传递的字符串大小适合
sprintf的输出。len(string);和它有什么关系? -
另外,请注意,说明符
"%2f"确实不防止sprintf的输出溢出。 -
int len = len(string);是高度混乱。不要这样做。
标签: c floating-point printf