C C 學習筆記 字串庫函式

2021-06-23 07:45:49 字數 3214 閱讀 3419

1  strcpy 的函式原型:

char *strcpy(char *strdest, const char*strsrc)     //其中 strdest 是目的字串,strsrc 是源字串

// 入門級

char *strcpy(char *strdest, const char *strsrc)

if ( strdest == strsrc )

char *tmpptr = strdest;

while('\0' != *strsrc )

//*p++等價於*(p++),而(*p)++是取p所指向位址的值,然後再將這個值+1

*strdest = '\0'; //拷貝結束標誌 '\0'

return tmpptr;

}//工業級

char *strcpy(char *strdest, const char *strsrc) //使用const來約束strsrc,提高程式的健壯性。

return tmp;

}

2 strcat函式原型:

char *strcat(char *strdest, const char *strsrc)

char *strcat(char *strdest, const char *strsrc) //將源字串加const,表明其為輸入引數

while(*strdest++ = *strsrc++)

return address;

}char *strcat(char *strdest, const char *strsrc) //將源字串加const,表明其為輸入引數

while(*strsrc)

return address;

}

3 strcmp函式原型:

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

//源**

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

return *str1 - *str2;

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

str1++;

str2++;

} return*str1-*str2;

}

4 strlen函式原型:

int strlen(const char *str)

int strlen(const char *str)

return len;

}

//不允許呼叫庫函式,也不允許使用任何全域性或區域性變數編寫

//int my_strlen (char *strdest)

int my_strlen( const char* strdest )

else

}int my_strlen( const char* strdest )

5 memcpy函式原型:

void *memcpy(void *dst, const void *src, size_t count)

void *memcpy(void *dst, const void *src, size_t count)

return dst;

}//另外一種實現

void * memcpy(char *strdest, const char *strsrc, int count)

unsigned char *tempdest;

unsigned char *tempsrc;

tempdest = (unsigned char *)tempdest;

tempsrc = (unsigned char *)tempsrc;

while( count-- )

return strdest;

}

附:strcpy和memcpy主要有以下3方面的區別:

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

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

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

6  memmove函式原型:

void *  memmove( void * dst,const void * src,size_t count)

// (1)當源記憶體的首位址等於目標記憶體的首位址時,不進行任何拷貝

// (2)當源記憶體的首位址大於目標記憶體的首位址時,實行正向拷貝

// (3)當源記憶體的首位址小於目標記憶體的首位址時,實行反向拷貝

void * memmove( void * dst,const void * src,size_t count)

} else }

return(ret);

}void* memmove(void* dest, const void* src, size_t n)

else if (s<-----d-----> 記憶體高階 start at end of s

// (2)記憶體低端 <-----s--<==>--d-----> 記憶體高階 start at end of s

// (3)記憶體低端 <-----sd-----> 記憶體高階 do nothing

// (4)記憶體低端 <-----d--<==>--s-----> 記憶體高階 start at beginning of s

// (5)記憶體低端 <-----d-----> <-----s-----> 記憶體高階 start at beginning of s

附: memcpy與memmove的目的都是將n個位元組的源記憶體位址的內容拷貝到目標記憶體位址中。

當src和dst區域沒有重疊時,兩個函式是完全一樣的。木有重疊的條件是: dst <= src || (char *)dst >= ((char *)src + count 。否則,memcpy是不能正常工作的,memmove是可以正常工作的

字串庫函式

只用字串庫函式需要加上標頭檔案 include 字串陣列都根據 0 來判斷字串結尾 形參為char 型別,則實參可以是char陣列或者字串常量。字串的拷貝 strcpy char dest,char src 字串比較大小 int strcmp char s1,char s2 求字串長度 int st...

字串庫函式 strtok

string.h 中定義 char strtok char str,const char delim 當strtok 在引數str的字串中發現引數delim中包涵的分割字元時,則會將該字元改為 0 字元。在第一次呼叫時,strtok 必需給予引數str字串,往後的呼叫則將引數str設定成null。每...

C C 對常見字串庫函式的實現

在c中的string.h標頭檔案中存在很多對字串進行操作的函式,利用這些函式可以方便的對字串進行操作。下面將對常見的字串函式進行解釋和實現。strcpy 函式原型 char strcpy char dest,char src 函式功能 將str所指由nullptr的字串複製到dst所指的陣列中,並返...