-1

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};

しかし、floatが「float」から「char *」への不正な明示的変換を取得する場合 、誰かが割り当て方法を教えてくれますか?

4

2 に答える 2

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 *

于 2012-08-07T08:18:40.703 に答える
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 ++のタグを付ける必要がありますが、両方のタグを付けることはめったにありません。

于 2012-08-07T08:20:05.847 に答える