我想知道为什么将字符串转换为 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*?