C++ string的c_str函式極易產生bug, 有陷阱, 請慎用---強烈建議用strncpy來拷貝c_str
阿新 • • 發佈:2019-02-15
string的c_str函式很怪異很危險, 先來看一個簡單的例子:
#include <iostream>
#include <string>
using namespace std;
int main()
{
string s = "abc";
const char *p = s.c_str();
cout << p << endl; // abc
s = "xyz";
cout << p << endl; // 居然是xyz
return 0;
}
看看吧, c_str確實很怪異, 網上有很多網友遇到類似更多的問題, 久久才定位出來最後, 我還是要強調一下:標準string中c_str的實現很怪異, 希望大家用的時候一定要小心, 強烈建議用strncpy拷貝出來, 拷貝出來, 然後你愛用咋用。#include <iostream> #include <string> using namespace std; int main() { string s = "abc"; char szStr[1024] = {0}; strncpy(szStr, s.c_str(), sizeof(szStr) - 1); // 強烈建議拷貝出來 const char *p = szStr; cout << p << endl; // abc s = "xyz"; cout << p << endl; // abc return 0; }