程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> c++中string類字符串和c中char*/char[]型型字符串的區別

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

編輯:C++入門知識

概念區分
在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類,示例:
[cpp] 
#include<iostream> 
#include<string> 
using std::string; 
using namespace std; 
int main(){  
string s = "abcdefg"; 
string::iterator i;//支持迭代器  
for(i=s.begin();i!=s.end();i++) 
  cout<<*i<<" ";//逐個輸出string s中的元素  
 system("pause"); 
 return 0; 

與vector容器區別,例:
[cpp]
#include<iostream> 
#include<vector> 
using namespace std; 
int main() 

vector<string> s(5,"abcdefg"); 
vector<string >::iterator i; 
for(i=s.begin();i!=s.end();i++) 
  cout<<*i<<" ";//逐個輸出vector s中的元素  
 system("pause"); 
 return 0; 


c中,參考:
基礎備忘:new\delete和malloc\free及memset
字符串指針與char型指針數組
基礎備忘:字符數組、字符串和字符串處理基本函數
錯誤示例:
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)。概念區分
在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類,示例:
[cpp] 
#include<iostream> 
#include<string> 
using std::string; 
using namespace std; 
int main(){  
string s = "abcdefg"; 
string::iterator i;//支持迭代器  
for(i=s.begin();i!=s.end();i++) 
  cout<<*i<<" ";//逐個輸出string s中的元素  
 system("pause"); 
 return 0; 

與vector容器區別,例:
[cpp] 
#include<iostream> 
#include<vector> 
using namespace std; 
int main() 

vector<string> s(5,"abcdefg"); 
vector<string >::iterator i; 
for(i=s.begin();i!=s.end();i++) 
  cout<<*i<<" ";//逐個輸出vector s中的元素  
 system("pause"); 
 return 0; 


c中,參考:
基礎備忘:new\delete和malloc\free及memset
字符串指針與char型指針數組
基礎備忘:字符數組、字符串和字符串處理基本函數
錯誤示例:
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)。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved