【发布时间】:2016-11-28 00:44:33
【问题描述】:
我正在尝试编写一个简单的函数,它将数字转换为给定格式的字符串,如下所示:
char * write_number(const char *format, void *number) {
char mystring[50];
sprintf(mystring, format, number);
return mystring;
}
唯一的问题是这适用于整数数据类型,但不适用于浮点/双精度数据类型。无论数据类型如何,有什么方法可以使这项工作。
谢谢!
对原问题的补充:
感谢您的建议。我没能成功,这是我想要得到的完整示例。
#include <stdio.h>
void write_number(const char *format, void *number) {
char mystring[50];
sprintf(mystring, format, *number);
printf("%s\n", mystring);
}
int main(void) {
int a = 10;
float b = 20;
double c = 40;
write_number("int: %03d", &a);
write_number("float: %6.2f", &b);
write_number("double: %6.2f", &c);
return 0;
}
【问题讨论】:
-
不,这个函数无论如何都坏了:它返回一个局部变量的地址。
-
是的,是的,因为返回语句错误导致函数损坏。但为什么这适用于整数数据类型?
-
添加这个:printf("void*=%d, int=%d, float=%d, double=%d", sizeof(void *), sizeof(int), sizeof(float ), sizeof(double));我的猜测是,你会得到 4、4、8、8(假设 float 不起作用),或者如果 float 起作用,你会得到 4、4、4、8。
标签: c string pointers type-conversion void