概念區分
在c中,是沒有string類型的數據的。但是c語言裡有<string.h>這個頭文件。容易讓人誤認為c中有string類型的數據。
區分string的含義:
1)(在c和c++中)如果string表示字符串型數據,那麼c中是有字符串類型數據的(用char[]或者char *來聲明定義)。但是沒有string類型數據。而c中的<string.h>這個頭文件裡聲明的函數原型也全是針對char數組的種種操作,如strcmp,strcpy,strcat等。
2)(在c++中)如果string表示string類型,那麼c++中才有,c中沒有。string在c++中是一種特殊的類。string 和 vector、list一樣,都是標准庫類型。 string 類型支持長度可變的字符串,C++ 標准庫將負責管理與存儲字符相關的內存,以及提供各種有用的操作。
需要:
#include <string>
using std::string;c++中string類,示例:
與vector容器區別,例:
錯誤示例:
int main(int argc, char* argv[])
{
char *n;
n=new char[20];
n="Hello World";
printf("%s\n",n);
return 0;
}
上述代碼有誤,指出其中三個錯誤:
第一,C語言裡沒有new。
C中是這樣的:
char * n;
n = (char *)malloc(sizeof(char) * 20);
第二,分配的空間在棧中,不能給它直接等堆裡的常量。
n = "Hello, World!"; // 錯
應該是 strcpy(n, "Hello, World!");
第三,C/C++中分配了空間要釋放。
C++中new了就要delete,其中 new [] 和 delete []配對,new 和 delete 配對。
C中用malloc分配的內存對應的是 free。
所以上述代碼中需要要 free (n)。