C語言詳細(xì)分析常見字符串函數(shù)與模擬實現(xiàn)_第1頁
C語言詳細(xì)分析常見字符串函數(shù)與模擬實現(xiàn)_第2頁
C語言詳細(xì)分析常見字符串函數(shù)與模擬實現(xiàn)_第3頁
C語言詳細(xì)分析常見字符串函數(shù)與模擬實現(xiàn)_第4頁
C語言詳細(xì)分析常見字符串函數(shù)與模擬實現(xiàn)_第5頁
已閱讀5頁,還剩2頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

第C語言詳細(xì)分析常見字符串函數(shù)與模擬實現(xiàn)六.strncat

char*strncat(char*dest,constchar*source,size_tcount)

作用是將源字符串的前count個字符追加到dest后面、

并且會在結(jié)尾加上\0

chararr1[]="abcdef\0xx";

chararr2[]="qwer";

strncat(arr1,arr2,2);

修改后為abcdefqw

strncat的模擬實現(xiàn)

#define_CRT_SECURE_NO_WARNINGS1

#includestdio.h

#includestring.h

#includeassert.h

voidmy_strncpy(char*str,char*qtr,intsize)

assert(strqtr);

intt=strlen(str);

for(inti=0;isize;i++)

*(str+t+i)=*qtr;

qtr++;

*(str+t+size)='\0';

intmain()

charsrc[50],dest[50];

strcpy(src,"Anice");

strcpy(dest,"BOYYYYYYY");

intn=0;

scanf("%d",

my_strncpy(src,dest,n);

printf("%s",src);

}

七.strncmp

intstrncm(constchar*str,constchar*qtr,size_tnum)

指定比較前num個字符,其他同strcmp一樣

八.strstr

constchar*strstr(constchar*str1,constchar*str2);

char*strstr(char*str1,constchar*str2);

用于查找子串,返回第一次找到的地址

九.strtok

char*strtok(char*str,constchar*sep)

參數(shù)sep是由分隔符組成的一個字符串

str為一個字符串,包含sep中零個或者多個分隔符.

strtok會找到str中第一個分隔符,并把其替換成\0,返回一個指向這個分隔符的指針

若第一個參數(shù)為\0,則從上一波保存的位置向后查找另一個分隔符

若字符串中不存在更多的分隔符,則返回NULL指針

chara[]="A@nice.boy";

charsep[]="@.";

printf("%s",strtok(a,sep));

printf("%s",strtok(NULL,sep));

如以上結(jié)果為Anice

chara[]="A@nice.boy";

constcharsep[]="@.";

chararr[30];

char*str=NULL;

strcpy(arr,a);

for(str=strtok(arr,sep);str!=NULL;str=strtok(NULL,sep))

printf("%s",str);

}

以上輸出為Aniceboy

十.strerror

char*strerror(interrnum)

errno是一個全局變量,記錄最后的錯誤代碼,程序剛剛啟動的時候,errno被設(shè)置為0;程序在運(yùn)行過程中,任何一個函數(shù)發(fā)生錯誤都有可能修改errno的值,讓其變?yōu)橐粋€非零值,用以告知用戶發(fā)生了特定類型的錯誤。

十一.memcpy

void*memcpy(void*dest,constvoid*source,size_tcount)

作用是將源字符串的前count個字節(jié)拷貝到dest上

inta1[20]={1,2,3,4,5,6,7,8};

inta2[5]={0};

memcpy(a1,a2,20);

執(zhí)行后,a1數(shù)組前五個元素變成0

memcpy的模擬實現(xiàn):

由于memcpy的拷貝是一個字節(jié)一個字節(jié)進(jìn)行的

可用以下代碼模擬實現(xiàn)

void*my_memcpy(void*dest,constvoid*source,size_tcount)

assert(sourcedest);

void*ret=dest;

while(count--)

*(char*)dest=*(char*)source;

source=(char*)source+1;

dest=(char*)dest+1;

returnret;

}

十二.memmove

void*memmove(void*dest,constvoid*source,size_tcount)

可以實現(xiàn)重疊內(nèi)存拷貝

模擬實現(xiàn):

void*my_memmove(void*dest,constvoid*source,size_tcount)

if(destsource)

while(count--)

*(char*)dest=*(char*)source;

dest=(char*)dest+1;

source=(char*)source+1;

else

while(count--)

*((char*)dest+count)=*((char*)source+count);

}

十三.memcmp

void*memcpy(void*str,constvoid*qtr,size_tcount)

比較str和qtr的前count個字節(jié),注意是一個字節(jié)一個字節(jié)比較

這就很有意思了

請看以下代碼

inta[5]={1,2,3,4,5};

intb[5]={1,2,3,4,0x11223305};

memcmp(a,b,16);

很明顯數(shù)組的前十六個字節(jié)相同,會返回0,但如果是前十七個呢

這是因為

5存儲為05000000

0x11223305為05332211

十四.mems

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論