13,826
社区成员
发帖
与我相关
我的任务
分享
AnsiString astr = "abcd";
char sz[10] = { 0 };
strcpy(sz, astr.c_str());
以上简单代码不考虑美观,不考虑命名的专业性,不考虑字符串安全等各方面问题,仅仅是举个例子。
这段代码中假设 astr.c_str() 返回的地址(char *) 是0x02001234,执行 strcpy 这个语句时,0x02001234 这个地址是 AnsiString 对象的字符串缓冲首地址,所以 strcpy 执行成功,sz 中是我们期望的数据 "abcd",但如果此时将 astr.c_str() 返回的指针赋给一个char * 对象 p, 也就是让 p 指向 0x02001234,在后续代码中继续使用的话,0x02001234 这个地址的数据,可能已经不是期望的 "abcd" 了。那么此时就有可能会出错。
总结一下注意 String(AnsiString/UnicodeString) 的 c_str() 返回数据的持久性问题。