函数应返回printf
类型的float
的{{1}}值
输入:
char str*
功能
:我的函数采用输入字符串char *string = "%f";
float k = 1.0005325678910
和浮点值%f
作为将1.0005325678910
的值存储在printf
中的输入。这里我无法为{{1 }}
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;
}
分配内存
输出:1.000533
我的代码不应舍入最后一位。
编辑:
例如:如果我的char *output = 1.000532;
,则预期输出应该为char *answer
,但函数float k = 6.143211
会舍入最后一位数字。
答案 0 :(得分:2)
您似乎正在尝试这样做:
#include <stdio.h>
#include <stdlib.h>
char *res(char *format, float k)
{
// Ask snprintf to report how many bytes are needed.
int t = snprintf(NULL, 0, format, k);
if (t < 0)
{
fprintf(stderr, "Encoding error.\n");
exit(EXIT_FAILURE);
}
// Allocate space for those bytes and a null terminator.
char *result = malloc(t+1);
if (!result)
{
fprintf(stderr, "Allocation error.\n");
exit(EXIT_FAILURE);
}
// Format the number.
snprintf(result, t+1, format, k);
return result;
}
int main(void)
{
char *b = res("%f", 1.0005325678910);
puts(b);
free(b);
}
答案 1 :(得分:0)
执行此操作的常规C方法是传入char * buf和size_t len。然后返回已经或将要写入缓冲区的字符数。
但是,如果您要编写一个分配适当大小的缓冲区的函数,则有两种选择:
1)始终为“%2f”分配最大大小。考虑到大小可能是最好的。计算适当的大小以在此处或此处保存字节是不值得的CPU开销。
2)使用以下方法找出正确的长度:
char c;
int len = snprintf(&c, 1, "%2f, k);
assert(len >= 0);
++len;
或输出到固定大小的缓冲区,然后使用strdup()。排序为1和2的组合。