我有string,int,float值并尝试将这些值分配给char * c []数组。
char *str = "helloo";
int int = 1000;
short st1[]={32760};
float flt = 2.345;
char* c [] = {(char*)int1,(char*)str,(char*)flt,(char*)st1};
但浮动得到从'浮动'非法显式转换为'char *' 任何人都告诉我如何分配?
答案 0 :(得分:2)
在C ++中:
#include <string>
std::string arr[] = { std::to_string(1000),
"helloo",
std::to_string(2.345f),
std::to_string(32760) };
您可以使用arr[0].c_str()
等取回char const *
s。
答案 1 :(得分:2)
您不能只是投射这些类型并期望获得有用的结果。转换是一种最小的操作,可以用某些预定义的方式转换数据,但它不会(例如)智能地将整数转换为它们的字符串表示。
这就是你的编译器抱怨的原因。
如果你想要数字数据的字符串表示,你必须以不同的方式转换它们,例如:
char intStr[30]
sprintf (intStr, "%d", int1);
如果您希望获得所有字符串表示,您可以执行以下操作:
char *str = "helloo";
int int1 = 1000;
short st1[]={32760};
float flt = 2.345;
char mybuff1[50], mybuff2[50], mybuff3[50], mybuff4[50];
sprintf (mybuff1, "%d", int1);
sprintf (mybuff2, "%s", str);
sprintf (mybuff3, "%f", flt);
sprintf (mybuff4, "%d", st1[0]);
char *c [] = {mybuff1, mybuff2, mybuff3, mybuff4);
请注意,尽管C和C ++具有非常相似的习惯用法,并且如果您坚持使用子集,它们大多兼容,但它们不使用相同的语言并且做出最佳改变的方式会发生显着变化取决于您使用的实际语言。
例如,很少有必要在C ++中使用C风格的字符串,因为该语言提供了令人印象深刻的真实字符串类型。同上malloc/free
而不是new/delete
和许多其他方面。
问题一般应标记为C或C ++,很少都是。