今天重點學習了一下關於字串的一些知識點,總結一下如下:
可以利用這個特性判斷字串是否到末尾了。假設有字元陣列str,下面的while()可以判斷字元陣列是否結束。
int i = 0;
while(str[i])
a).strcpy函式的原型char *strcpy(char *strdest,const
char *strsrc);
具體實現如下:
#include//包含巨集
...char *strcpy(char* strdest,const char* strsrc)
其中
while((*strdest++=*strsrc++)!='\0')
不太好理解,可以理解為下面兩種方式:
//第一種
while(1)
//第二種
while ( *strsrc != '\0' )
*strdestcopy=『\0』;
b).void assert(int expression)函式
這個函式判斷expression的值是否為真,如果值為真,則跳過,接著執行下一條語句,如果其值為假,則向stderr列印一條出錯訊息,然後通過呼叫abort函式來終止程式。
c).char strcpy(char strdest,char* strsrc)的()裡面已經實現了對源字串到目標字串的複製,為什麼還要返回char*?
答:是為了實現鏈式表示式,返回具體值,就像下面這樣:
int length =strlen(strcpy(strdest,"hello world"));
d).在使用strcpy()函式時,必須預先為目標字串分配足夠的空間。
例:下面的程式會出現什麼問題?[美國某著名軟體公司面試題]
#include
#include
int main(void)
實際執行結果如下:
可以看到源字串即便是宣告成const還是被截掉了一部分。原因在於目標字串空間不夠。先看一下s和d的位址是多少。
#include
#include
int main(void)
執行結果:
可以看到s的位址是2686694,d的位址是2686690,因此有下圖:
因此,d=」123456789\0」, s =」56789\0789\0」。輸出是遇到\0即結束輸出。
malloc函式的原型為:void* malloc(unsigned int size);其作用是在記憶體的動態儲存區中分配乙個長度為size的連續空間。引數是乙個無符號的整型數,返回值是乙個指向所分配的連續儲存域的起始位址的指標。如果函式沒有成功分配空間,則會返回乙個null並執行相應的操作。
free()函式與malloc()配套使用,原型為 void free(void* p)作用是釋放p所指的記憶體區域。
關於C語言字串指標的一點點總結
一直在看指標的資料,今天實踐了一次字串指標的操作,做乙個簡單的總結。如下,char x abcd 宣告乙個字元型別的指標x 指向乙個字串需要特別注意的地方為 1 指標型別為char 指標的型別決定了這個指標指向資料的型別 2 指標變數 x 自身是有變數位址的,也就是說 x 變數作為乙個變數,有自己的...
c new字串的一點心得
c 中,new的用法很靈活,這裡進行了簡單的總結 1.new 分配這種型別的乙個大小的記憶體空間,並以括號中的值來初始化這個變數 2.new 分配這種型別的n個大小的記憶體空間,並用預設建構函式來初始化這些變數 include include using namespace std int main...
字串常量 字元陣列 字元指標的一點小結
在程式中如果出現了字串形式,編譯器在處理的時候通常會在其末尾新增乙個 0 符號,作為字串的結束標識。通常,字串常量在程式中有兩種可能的身份 1 字元陣列的初始化列表 2 真正的字串常量。1 字元陣列的初始化列表 例如,有 char string hello 在這裡出現了字串 hello 編譯器在處理...