C風格字串與string

2021-09-22 12:19:19 字數 2103 閱讀 2904

c風格字串並不是一種型別,它指的是一種程式設計習慣,指c語言中以'\0'結尾的字串c語言中沒有字串型別,通常用字串陣列來存放乙個字串;可以直接將乙個字串直接量(字面量)直接賦值給陣列(可以定義長度也可以不指定),編譯器會在字元陣列末尾自動的新增'\0'作為串的結束符。

用字串給字元陣列賦值時由於要新增結束符'\0',陣列的長度要比字串的長度大1.

puts和printf在輸出字串時會逐個掃瞄字元,直到遇見'\0'才結束。

c語言中字串定義方式有兩種:char *s或者char s,都屬於c風格字串,其區別是char *s定義的字串直接量儲存在記憶體的資料段中且不可更改,字元陣列儲存在棧記憶體中。

//例:以下程式會報錯,因為danny儲存在記憶體資料段中,不可更改。

char *src = "danny";

const char *addition = "andy";

strcat(src, addition);

//正確形式

char src[20] = "danny";

const char *addition = "andy";

strcat(src, addition);

注意:c風格字串以'\0』結尾,標頭檔案cstring和string.h中定義的函式strlen、strcat等函式操作的物件是c風格字串。

//c風格字串轉string:直接賦值

char *ch1="123456";

string str=ch1;//直接賦值即可

cout

string st=ch;//直接賦值

//string轉c風格字串:兩種方式c_str() data()

string str2="gsghd";

const char *s=str2.c_str();//.c_str()返回字串常量

printf("%s\n",s);

const char *cs=str2.data();

printf("%s\n",cs);

//c字元陣列輸入方式:

char ch[100];

//scanf("%s",ch);//c字串輸入方式

//printf("%s\n",ch);

char *ch2;

//scanf("%s",ch2);報錯,ch2未被初始化指向不明

//ch2=(char *)malloc(sizeof(char));

//scanf("%s",ch2);//已經分配好空間

gets(ch);

printf("%s\n",ch);

//陣列遍歷:需要獲取長度,使用函式strlen

int len=strlen(ch);

for(int i=0;i//c風格字串拼接strcat

char ch[100]="";

for(int i=0;i<10;i++)

printf("%s\n",ch);

//使用sprintf

char s[100];

for(int i=0;i<2;i++)

printf("%s\n",s);

//string拼接

string str1="skkk";

stringstream ss;

ss

cout

//to_string方法會導致多重定義問題,adding #define __use_mingw_ansi_stdio 0 to the start

//of the code,before any includes, which disables the definition of vsnprintf in

string str2="ksksks";

string res = str2 + to_string(5);

cout

string str3=str2+'c';

cout<

C風格字串與C 風格字串

c風格字串 對字串進行操作的 c 函式定義在標頭檔案中 1.字串定義 char result 2.字串的最後乙個字元是null字元 0 可以通過這個字元確定字串的結尾。3.strlen 返回的是字串的大小 因此,分配空間的時候,需要比字串的實際空間大1.e.g.char copystring con...

C風格字串與C 風格字串

c風格字串 對字串進行操作的 c 函式定義在標頭檔案中 1.字串定義 char result 2.字串的最後乙個字元是null字元 0 可以通過這個字元確定字串的結尾。3.strlen 返回的是字串的大小 因此,分配空間的時候,需要比字串的實際空間大1.e.g.char copystring con...

string和C風格字串

include include include include 雖然改變s後,仍然輸出正確,但是切記 無法保證c str 返回的陣列一直有效,保險做法是拷貝乙份 改進後 include include include include 雖然改變s後,仍然輸出正確,但是切記 無法保證c str 返回的陣...