“不受限制的“字串函式
按《C和指標》中所說,那些常用的字串函式都是“不是限制的”,就是說它們只能通過尋找字串末尾的NULL來判斷字串的長度,
strlen
strlen函式用于求解字串長度,其回傳型別為unsigned int(即size_t),strlen函式從起點開始,往后計數,遇到‘\0’停止,
值得注意的是:strlen函式的回傳型別,看如下代碼:
#include<string.h>
#include<iostream>
using namespace std;
int main()
{
if ((strlen("abc") - strlen("abcdef")) > 0)
cout << "大于" << endl;
else
cout << "小于" << endl;
return 0;
}
輸出 : 大于,不必驚奇,函式的size_t(-3)是一個正數,
strcpy
strcpy函式是字串拷貝函式
函式原型為:

需要注意:目標字串是要可以更改的,空間要大,足夠存放拷貝的源字串,
拷貝程序中,函式將源字串的‘\0’一起拷貝到目標中,
#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函式為字串比較函式,比較的不是字串的長度,而是對應字符的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函式為字串追加函式,函式原型:

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

在目標字串中查找子字串,找的則回傳指向子字串的指標,否則回傳空指標,
int main()
{
char arr[] = "hello, how are you ?";
char p[] = "are";
cout << strstr(arr, p) << endl;
return 0;
}
結果為:are you ?
strtok
strtok函式為字串分隔函式,函式原型為:

strDelimit為字串,定義了分隔字符的集合,函式執行是遇到分割字符時,將它改為‘\0’,范圍一個指向這個標記的指標,注意:strtok函式執行時修改了字串的內容,
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函式的作用:回傳錯誤碼對應的資訊,函式原型為

使用時要包含#include<errno.h>
小結
這些“不受限制的”的字串函式,在執行程序中,函式本身要尋找字串結尾的’\0’來作為結束執行標志,如果找不到’\0’,這函式執行可能就會越界,得不到正確的結果,
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/265420.html
標籤:其他
上一篇:C++ 輸入流
下一篇:BUG:Could not connect to Redis No route to host(redis集群報錯)
