私が疑問に思っているのは、文字列を char* に変換すると、新しい char* が元のリテラル文字列と等しくないように見える理由です。
私が持っている場合:
//raw versions of the string:
string s = "fun";
char* c = "fun";
char* s_convert = strdup(s.c_str()); //converting the string to char*
printf("(string) == 'fun' -> %d\n", (s == "fun"));
printf("(char*) == 'fun' -> %d\n", (c == "fun"));
printf("(char* convert) == 'fun' -> %d\n", (s_convert == "fun"));
printf("(string) == (char*) -> %d\n", (s == c)); //does new char* equal original string
生成:
(string) == 'fun' -> 1 //true
(char*) == 'fun' -> 1 //true
(char* convert) == 'fun' -> 0 //false
(string) == (char* convert) -> 1 //true
したがって、変換された char* は元の文字列と同じままです。しかし、何らかの理由char* s_convert
で、元のリテラル文字列と等しくありませんが、元の文字列はstring s
そうです。
なぜこれが起こるのですか?そして、これを引き起こさない文字列を char* に変換できるより良い方法はありますか?