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所指的陣列中,並返...