strcpy函數:
- char *strcpy(char *Dest , const char *Src)
- {
- assert((Dest != NULL) && (Src != NULL));
- char *address = Dest;
- while((*Dest++ = *Src++) != '\0')
- NULL;
- return address;
- }
strncpy函數:
利用標准庫函數strncpy(),可以將一字符串的一部分拷貝到另一個字符串中。strncpy()函數有3個參數:第一個參數是目錄字符串;第二個參數是源字符串;第三個參數是一個整數,代表要從源字符串拷貝到目標字符串中的字符數。
- char *strncpy(char *strDest , const char *strSrc , int n)
- {
- assert((strDest != NULL) && (strSrc != NULL));
- char *address = strDest;
- while(n-- > 0)
- *strDest++ = *strSrc++;
- return address;
- }
strcmp函數:
strcmp函數是C/C++中基本的函數,它對兩個字符串進行比較,然后返回比較結果,函數形式如下:
int strcmp(constchar*str1,constchar*str2);
其中str1和str2可以是字符串常量或者字符串變量,返回值為整形。返回結果如
下規定:
①str1小於str2,返回負值或者-1(VC返回-1);
②str1等於str2,返回0;
③str1大於str2,返回正值或者1(VC返回1);
strcmp函數實際上是對字符的ASCII碼進行比較,實現原理如下:首先比較兩個串的第一個字符,若不相等,則停止比較並得出兩個ASCII碼大小比較的結
果;如果相等就接着比較第二個字符然后第三個字符等等。無論兩個字符串是什么樣,strcmp函數最多比較到其中一個字符串遇到結束符'/0'為止,就能得出結果。
- int strcmp(const char* str1, const char* str2)
- {
- assert((str1 != NULL) && (str2 != NULL);
- int ret = 0;
- while (!(ret = (unsigned char*)*str1 - (unsigned char*)*str2) && (*str2))
- {
- str1++;
- str2++;
- }
- if (ret > 0)
- {
- return 1;
- }
- else if (ret < 0)
- {
- return -1
- }
- return 0;
- }
strlen函數:
- int strlen(const char *str)
- {
- assert(str != NULL);
- int len;
- while((*str++) != '\0')
- {
- len++;
- }
- return len;
- }
strcat函數原型:
- //將源字符串加const,表明其為輸入參數
- char *strcat(char *strDest, const char *strSrc)
- {
- // 后文return address,故不能放在assert斷言之后聲明address
- char *address = strDest;
- assert((strDest != NULL) && (strSrc != NULL)); //對源地址和目的地址加非0斷言
- while(*strDest) //是while(*strDest!=’\0’)的簡化形式
- {
- //若使用while(*strDest++),則會出錯,因為循環結束后strDest還會執行一次++,
- //那么strDest將指向'\0'的下一個位置。/所以要在循環體內++;因為要是*strDest最后指
- //向該字符串的結束標志’\0’。
- strDest++;
- }
- while(*strDest++ = *strSrc++)
- {
- NULL; //該循環條件內可以用++,
- } //此處可以加語句*strDest=’\0’;無必要
- return address; //為了實現鏈式操作,將目的地址返回
- }
memcpy函數:
功能:從源src所指的內存地址的起始位置開始拷貝n個字節到目標dest所指的內存地址的起始位置中。
void* memcpy(void *dest , const void* src , size_t count) { assert( (dest != NULL) && (src != NULL)); //安全檢查 assert(count > 0); char* psrc = (char *)src; char* pdest = (char *)dest; while(count--) { *pdest++ = *psrc++; } return dest; }
編寫一個strcat函數:
- #include <stdio.h>
- char* strcat(char *str1,char *str2)
- {
- char* tempt = str1;
- while(*str1!='\0')
- {
- str1++;
- }
- while(*str2!='\0')
- {
- *str1 = *str2;
- str1++;
- str2++;
- }
- *str1 = '\0';
- return tempt;
- }
- int main()
- {
- char a[20] = "hello";
- char b[20] = ",world!";
- printf("%s\n",strcat(a,b));
- return 0;
- }