




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第C語言詳細分析常見字符串函數與模擬實現六.strncat
char*strncat(char*dest,constchar*source,size_tcount)
作用是將源字符串的前count個字符追加到dest后面、
并且會在結尾加上\0
chararr1[]="abcdef\0xx";
chararr2[]="qwer";
strncat(arr1,arr2,2);
修改后為abcdefqw
strncat的模擬實現
#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)
參數sep是由分隔符組成的一個字符串
str為一個字符串,包含sep中零個或者多個分隔符.
strtok會找到str中第一個分隔符,并把其替換成\0,返回一個指向這個分隔符的指針
若第一個參數為\0,則從上一波保存的位置向后查找另一個分隔符
若字符串中不存在更多的分隔符,則返回NULL指針
chara[]="A@nice.boy";
charsep[]="@.";
printf("%s",strtok(a,sep));
printf("%s",strtok(NULL,sep));
如以上結果為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被設置為0;程序在運行過程中,任何一個函數發(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數組前五個元素變成0
memcpy的模擬實現:
由于memcpy的拷貝是一個字節(jié)一個字節(jié)進行的
可用以下代碼模擬實現
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)
可以實現重疊內存拷貝
模擬實現:
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);
很明顯數組的前十六個字節(jié)相同,會返回0,但如果是前十七個呢
這是因為
5存儲為05000000
0x11223305為05332211
十四.mems
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 道路建設臨時員工雇傭合同
- 物資貿易企業(yè)資金自平衡管理與信息化研究
- 云南2024行測真題及答案
- 石油化工企業(yè)融資策略與資本結構優(yōu)化研究
- 上海市眾仁慈善服務中心招聘筆試真題2024
- 山東第一醫(yī)科大學第三附屬醫(yī)院招聘筆試真題2024
- 鶴壁市淇濱區(qū)公益性崗位招聘筆試真題2024
- 池州市東至縣總醫(yī)院招聘專業(yè)技術人員筆試真題2024
- 工作計劃與總結表
- 停車場規(guī)章管理制度
- 2023年中國化學奧林匹克競賽浙江省預賽試題及參考答案
- RB/T 089-2022綠色供應鏈管理體系要求及使用指南
- 優(yōu)秀傳統(tǒng)文化在高中政治教學中的應用策略 論文
- 匯川MD系列變頻器說明書文檔全文預覽
- 新媒體運營:微信公眾號運營教學課件
- 機修工考核評分表(月度)
- 路基實測項目檢測
- 柴油機外文文獻翻譯資料
- 國家開放大學《經濟法》形考任務1-4參考答案
- GB/T 5048-2017防潮包裝
- GB/T 4457.4-2002機械制圖圖樣畫法圖線
評論
0/150
提交評論