字串函式剖析

2021-07-22 08:20:29 字數 2784 閱讀 5738

strcpy() 字串拷貝

char *strcpy(char *strdestination, const

char *strsource)  

strcpy能把strsrc的內容複製到strdest,為什麼還要char * 型別的返回值?

為了實現鏈式表示式:int length = strlen( strcpy( strdest, 「hello world」) );

2. strncpy()

功能:把src所指由null結束的字串的前n個位元組複製到dest所指的陣列中。

說明:1. 如果src的前n個位元組不含null字元,則結果不會以null字元結束。

2. 如果src的長度小於n個位元組,則以null填充dest直到複製完n個位元組。

3. src和dest所指記憶體區域不可以重疊且dest必須有足夠的空間來容納src的字串。

返回值:返回指向dest的指標。

對strncpy()函式來說,它意味著只能使用「n」個字元的空間,包括末尾的nul字元。strncpy()函式也恰好只拷貝「n」個字元。如果第二個引數沒有這麼多字元,strncpy()函式會用nul字元填充剩餘的空間。如果第二個引數有多於「n」個的字元,那麼strncpy()函式在還沒有拷貝到nul字元之前就結束工作了。這意味著,在使用strncpy()函式時,你應該總是自己在目標字串的末尾加上nul字元,而不要指望strncpy()函式為你做這項工作。

對strncat()函式來說,它意味著最多只能拷貝「n」個字元,如果需要還要加上乙個nul字元。因為你真正知道的是目標字串能存放多少個字元,所以通常你要用strlen()函式來計算可以拷貝的字元數。

函式strncpy()和strncat()之間的區別是「歷史性」的(這是乙個技術用語,指的是「它對某些人確實起到了一定的作用,並且它可能是處理問題的正確途徑,但為什麼正確至今仍然說不清楚」)。

1

char *strncpy(char * dest, const char * source, size_t count) 2 8

if (count)

9

14 }

15return(start);

16 }

對於strcpy和strncpy的區別?

(1): strncpy 從某種意義上說是安全的。只要n的長度不超過s1分配的實際長度,就不會造成記憶體越界。

(2): 如果n不超過s1的長度,strncpy會在s1的尾部自動新增null字元。

memcpy()

功能:從源src所指的記憶體位址的起始位置開始拷貝n個位元組到目標dest所指的記憶體位址的起始位置中。

說明:

(1):source和dest所指記憶體區域不能重疊。

(2):如果目標陣列本身已有資料,執行memcpy()後,將覆蓋原有資料(最多覆蓋n)。如果要追加資料,則每次執行memcpy後,要將目標陣列位址增加到你要追加資料的位址。

(3):source和dest都不一定是陣列,任意的可讀寫的空間均可

返回值:返回指向dest的指標。

1

void *memcpy(void *dest, void *source, size_t count)

2

對於memcpy和strcpy的區別?

(1): 複製的內容不同。strcpy只能複製字串,而memcpy可以複製任意內容,例如字元陣列、整型、結構體、類等。

(2):複製的方法不同。strcpy不需要指定長度,它遇到被複製字元的串結束符」\0」才結束,所以容易溢位。memcpy則是根據其第3個引數決定複製的長度。

(3):用途不同。通常在複製字串時用strcpy,而需要複製其他型別資料時則一般用memcpy。

strcat(), 字串的連線.

char *strcat(char *target,const char *source)   

5.streql(), 判斷兩個字串是否相等.

int streql(char *str1,char *str2)   

return((*str1==null)&&(*str2==null));

}

6.strchr(), 在字串中查詢某個字元.

char *strchr(const

char *string,int letter)

chrcnt(), 計算某個字元在字串中出現的次數.

int chrcnt(const

char *string,int letter)

8.strcmp(), 判斷兩個字串是否相等.

int strcmp(const char *str1,const char *str2)   

if((*str1==*str2)&&(!*str1)) //same strings

return o;

else

if((*str1)&&(!*str2)) //same but str1 longer

return -1;

else

if((*str2)&&(!*str1)) //same but str2 longer

else

return((*str1>*str2)?-1:1);

}

字串和字串函式

字元輸入輸出 getchar putchar ch getchar putchar ch 字串函式 字串輸入 建立儲存空間 接受字串輸入首先需要建立乙個空間來存放輸入的字串。char name scanf s name 上述的用法可能會導致程式異常終止。使用字串陣列 可以避免上述問題 char na...

字串和字串函式

1.字串字面量 字串常量 用雙引號括起來的內容稱為字串字面量,也叫字串常量。字串常量屬於靜態儲存類別,這說明如果在函式中使用字串常量,該字串只會被儲存一次,在整個程式的生命期內存在,計時函式被呼叫多次。用雙引號括起來的內容被視為指向該字串儲存位置的指標。hello 中的 hello 類似於乙個陣列名...

字串函式

1 獲取字串的長度 length 2 判斷字串的字首或字尾與已知字串是否相同 字首 startswith string s 字尾 endswith string s 3 比較兩個字串 equals string s 4 把字串轉化為相應的數值 int型 integer.parseint 字串 lon...