我想知道的是爲什麼將字符串轉換爲char *似乎使新char *不等於它來自的文字字符串。C++ char *使用strdup從字符串轉換不等於原始原始字符串
如果我有:
//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 *,這不會導致此?
char * ==「string」不符合你的想法。它測試以查看char *的地址==常量的地址 – pm100 2014-10-30 15:48:07