歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> C++中string類字符串和c中char*/char[]型型字符串的區別

C++中string類字符串和c中char*/char[]型型字符串的區別

日期:2017/3/1 10:09:33   编辑:Linux編程

概念區分

在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類,示例:

  1. #include<iostream>
  2. #include<string>
  3. using std::string;
  4. using namespace std;
  5. int main(){
  6. string s = "abcdefg";
  7. string::iterator i;//支持迭代器
  8. for(i=s.begin();i!=s.end();i++)
  9. cout<<*i<<" ";//逐個輸出string s中的元素
  10. system("pause");
  11. return 0;
  12. }

與vector容器區別,例:

  1. #include<iostream>
  2. #include<vector>
  3. using namespace std;
  4. int main()
  5. {
  6. vector<string> s(5,"abcdefg");
  7. vector<string >::iterator i;
  8. for(i=s.begin();i!=s.end();i++)
  9. cout<<*i<<" ";//逐個輸出vector s中的元素
  10. system("pause");
  11. return 0;
  12. }

錯誤示例:

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)。

Copyright © Linux教程網 All Rights Reserved