C語(yǔ)言中“不受限制”的字符串函數(shù)總結(jié)
“不受限制的“字符串函數(shù)
按《C和指針》中所說(shuō),那些常用的字符串函數(shù)都是“不是限制的”,就是說(shuō)它們只能通過(guò)尋找字符串末尾的NULL來(lái)判斷字符串的長(zhǎng)度。
strlen
strlen函數(shù)用于求解字符串長(zhǎng)度,其返回類型為unsigned int(即size_t)。strlen函數(shù)從起點(diǎn)開(kāi)始,往后計(jì)數(shù),遇到‘\0'停止。
值得注意的是:strlen函數(shù)的返回類型。看如下代碼:
#include<string.h>
#include<iostream>
using namespace std;
int main()
{
if ((strlen("abc") - strlen("abcdef")) > 0)
cout << "大于" << endl;
else
cout << "小于" << endl;
return 0;
}
輸出 : 大于。不必驚奇,函數(shù)的size_t(-3)是一個(gè)正數(shù)。
strcpy
strcpy函數(shù)是字符串拷貝函數(shù)
函數(shù)原型為:

需要注意:目標(biāo)字符串是要可以更改的,空間要大,足夠存放拷貝的源字符串。
拷貝過(guò)程中,函數(shù)將源字符串的‘\0'一起拷貝到目標(biāo)中。
#include<string>
#include<iostream>
using namespace std;
int main()
{
char arr[20] = "abcdefgh******";
char* p = "hello world";
strcpy(arr, p);
cout << arr << endl;
return 0;
}
strcmp
strcmp函數(shù)為字符串比較函數(shù)。比較的不是字符串的長(zhǎng)度,而是對(duì)應(yīng)字符的ASCII值。
返回類型為:

#include<string>
#include<iostream>
using namespace std;
int main()
{
char arr[] = "abcde";
char p[] = "abde";
cout << strcmp(arr,p) << endl;
return 0;
}
strcat
strcat函數(shù)為字符串追加函數(shù)。函數(shù)原型:

將源字符串追加到目標(biāo)字符串上。
int main()
{
char arr[20] = "abcde ";
char p[] = "hello";
cout << strcat(arr, p) << endl;
return 0;
}
strstr
strstr為字符串查找函數(shù)。函數(shù)原型為:

在目標(biāo)字符串中查找子字符串,找的則返回指向子字符串的指針,否則返回空指針。
int main()
{
char arr[] = "hello, how are you ?";
char p[] = "are";
cout << strstr(arr, p) << endl;
return 0;
}
結(jié)果為:are you ?
strtok
strtok函數(shù)為字符串分隔函數(shù)。函數(shù)原型為:

strDelimit為字符串,定義了分隔字符的集合。函數(shù)執(zhí)行是遇到分割字符時(shí),將它改為‘\0',范圍一個(gè)指向這個(gè)標(biāo)記的指針。注意:strtok函數(shù)執(zhí)行時(shí)修改了字符串的內(nèi)容。
int main()
{
char str[] = "hello,how are you ?";
char * p;
p = strtok(str, ",?");
while (p != NULL)
{
printf("%s\n", p);
p = strtok(NULL, ",?");
}
return 0;
}
strerror
strerror函數(shù)的作用:返回錯(cuò)誤碼對(duì)應(yīng)的信息。函數(shù)原型為

使用時(shí)要包含#include<errno.h>
小結(jié)
這些“不受限制的”的字符串函數(shù),在執(zhí)行過(guò)程中,函數(shù)本身要尋找字符串結(jié)尾的'\0'來(lái)作為結(jié)束執(zhí)行標(biāo)志。如果找不到'\0',這函數(shù)執(zhí)行可能就會(huì)越界,得不到正確的結(jié)果。
到此這篇關(guān)于C語(yǔ)言中“不受限制”的字符串函數(shù)的文章就介紹到這了,更多相關(guān)C語(yǔ)言不受限制字符串函數(shù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C++中關(guān)于委派(Delegates)的實(shí)現(xiàn)示例
這篇文章主要介紹了C++中關(guān)于委派(Delegates)的實(shí)現(xiàn)示例,針對(duì)C++11的一些新特性進(jìn)行講解,需要的朋友可以參考下2015-07-07
基于opencv實(shí)現(xiàn)車道線檢測(cè)
這篇文章主要為大家詳細(xì)介紹了基于opencv實(shí)現(xiàn)車道線檢測(cè),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-02-02
C++實(shí)現(xiàn)藍(lán)橋杯競(jìng)賽題目---搭積木
這篇文章主要介紹了C++實(shí)現(xiàn)藍(lán)橋杯競(jìng)賽題目---搭積木,本篇文章通過(guò)題目分析列舉公式進(jìn)行分析算法,包含詳細(xì)的圖文,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-07-07
C++編程中隊(duì)內(nèi)聯(lián)函數(shù)的理解和使用
這篇文章主要介紹了C++編程中隊(duì)內(nèi)聯(lián)函數(shù)的理解和使用,簡(jiǎn)單舉例講解了inline關(guān)鍵字引出的內(nèi)聯(lián)函數(shù)的相關(guān)知識(shí),需要的朋友可以參考下2016-01-01
基于C語(yǔ)言實(shí)現(xiàn)計(jì)算生辰八字五行的示例詳解
生辰八字,簡(jiǎn)稱八字,是指一個(gè)人出生時(shí)的干支歷日期;年月日時(shí)共四柱干支,每柱兩字,合共八個(gè)字。這篇文章主要介紹了C語(yǔ)言實(shí)現(xiàn)計(jì)算生辰八字五行的示例代碼,需要的可以參考一下2023-03-03
C++實(shí)現(xiàn)學(xué)生選課系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)學(xué)生選課系統(tǒng),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-02-02

