字符串函数(strlen、strcmp、strcat、strncat、strncpy、strncmp、strchr、strrchr、strpbark、strstr、strspn、strcspn等)

有的字符串函数相比大家都很熟悉,这里将strlen,strcat等字符串函数的注意点说明一下。

首先,先看一下strlen函数:

字符串函数(strlen、strcmp、strcat、strncat、strncpy、strncmp、strchr、strrchr、strpbark、strstr、strspn、strcspn等)

但是请看下列这种情况:

字符串函数(strlen、strcmp、strcat、strncat、strncpy、strncmp、strchr、strrchr、strpbark、strstr、strspn、strcspn等)

为什么是较长的是“good day”呢?

因为strlen函数的返回值是无符号整数,无符号数相减也是无符号数,即被减数若小于减数结果仍大于0。

strcat函数:

strcat函数用于字符串的拼接。

字符串函数(strlen、strcmp、strcat、strncat、strncpy、strncmp、strchr、strrchr、strpbark、strstr、strspn、strcspn等)

字符串函数(strlen、strcmp、strcat、strncat、strncpy、strncmp、strchr、strrchr、strpbark、strstr、strspn、strcspn等)

但是strcat可不可以自己给自己拼接呢?

字符串函数(strlen、strcmp、strcat、strncat、strncpy、strncmp、strchr、strrchr、strpbark、strstr、strspn、strcspn等)

是不可以的,strcat拼接时,会将源字符串的‘\0’拷贝到目标字符串,但是自己给自己拼接,永远不会到'\0',也就没有形成字符串,所以strcat不能自己给自己拼接。

strcmp函数:

字符串函数(strlen、strcmp、strcat、strncat、strncpy、strncmp、strchr、strrchr、strpbark、strstr、strspn、strcspn等)

strcmp比较的是字符的ASCII(比较到出现不一样的字符或者一个字符串结束)

标准规定:当第一个字符串大于第二个字符串,返回的是大于0的数字;

当第一个字符串小于第二个字符串,返回的是小于0的数字;

当第一个字符串等于第二个字符串,返回0.

字符串函数(strlen、strcmp、strcat、strncat、strncpy、strncmp、strchr、strrchr、strpbark、strstr、strspn、strcspn等)

strncpy函数:

字符串函数(strlen、strcmp、strcat、strncat、strncpy、strncmp、strchr、strrchr、strpbark、strstr、strspn、strcspn等)

拷贝 num个字符从源字符到目标字符;

如果源字符串的长度小于num,则拷贝完源字符串后,在目标的后边追加0,直至到num;

值得注意的是strncpy没有拷‘\0'。

字符串函数(strlen、strcmp、strcat、strncat、strncpy、strncmp、strchr、strrchr、strpbark、strstr、strspn、strcspn等)

strncat函数:

字符串函数(strlen、strcmp、strcat、strncat、strncpy、strncmp、strchr、strrchr、strpbark、strstr、strspn、strcspn等)

拼接count个字符从源字符串到目标字符串;

strcat函数拷贝了'\0'。

字符串函数(strlen、strcmp、strcat、strncat、strncpy、strncmp、strchr、strrchr、strpbark、strstr、strspn、strcspn等)

strncmp函数:

字符串函数(strlen、strcmp、strcat、strncat、strncpy、strncmp、strchr、strrchr、strpbark、strstr、strspn、strcspn等)

比较到出现不一样字符或者一个字符串比较结束或者count个字符全部比较结束

字符串函数(strlen、strcmp、strcat、strncat、strncpy、strncmp、strchr、strrchr、strpbark、strstr、strspn、strcspn等)

其中char [ ][5]是指:

字符串函数(strlen、strcmp、strcat、strncat、strncpy、strncmp、strchr、strrchr、strpbark、strstr、strspn、strcspn等)

strchr函数:

字符串函数(strlen、strcmp、strcat、strncat、strncpy、strncmp、strchr、strrchr、strpbark、strstr、strspn、strcspn等)

strchr是指int c 字符第一次在string中出现的所处位置。

字符串函数(strlen、strcmp、strcat、strncat、strncpy、strncmp、strchr、strrchr、strpbark、strstr、strspn、strcspn等)

这个题是找到字符s在str字符串中出现的位置。

strrchr函数:

字符串函数(strlen、strcmp、strcat、strncat、strncpy、strncmp、strchr、strrchr、strpbark、strstr、strspn、strcspn等)

strrchr是指字符c最后一次出现在string所处位置。如果模拟strrchr函数,可从字符串后边字符c第一次出现的位置。

注:strchr函数和strrchr函数功能相反。

字符串函数(strlen、strcmp、strcat、strncat、strncpy、strncmp、strchr、strrchr、strpbark、strstr、strspn、strcspn等)

strpbrk函数:

字符串函数(strlen、strcmp、strcat、strncat、strncpy、strncmp、strchr、strrchr、strpbark、strstr、strspn、strcspn等)

strpbrk是指返回第一个字符串中第一个出现在第二个字符串中字符的地址。(返回第一个字符串的地址)

字符串函数(strlen、strcmp、strcat、strncat、strncpy、strncmp、strchr、strrchr、strpbark、strstr、strspn、strcspn等)

strstr函数:

字符串函数(strlen、strcmp、strcat、strncat、strncpy、strncmp、strchr、strrchr、strpbark、strstr、strspn、strcspn等)

返回第二个字符串中第一次在第一个字符串中出现的位置。(返回的是第一个字符串地址)

字符串函数(strlen、strcmp、strcat、strncat、strncpy、strncmp、strchr、strrchr、strpbark、strstr、strspn、strcspn等)

注意:在本题中不可将char str[ ]改为char *,因为char *变量字符串指字符串在字符常量区,不可修改,而strncpy语句修改了字符串,将会导致程序崩溃。

strspn函数:

字符串函数(strlen、strcmp、strcat、strncat、strncpy、strncmp、strchr、strrchr、strpbark、strstr、strspn、strcspn等)

返回的是str1字符串中开始部分匹配str2字符串中字符的个数。(str2中任意一个字符在str1开始部分出现就统计,str2中任意一个字符不在str1开始部分出现,就退出。)

字符串函数(strlen、strcmp、strcat、strncat、strncpy、strncmp、strchr、strrchr、strpbark、strstr、strspn、strcspn等)

str1中‘1’‘2’‘6’‘t’在str2字符串中出现,'h'没有出现在str2,退出,不在统计。

strcspn函数:

返回str1字符串开始部分出现的不在str2字符串中字符的个数。(如果str1开始部分字符在str2中出现,则退出)

字符串函数(strlen、strcmp、strcat、strncat、strncpy、strncmp、strchr、strrchr、strpbark、strstr、strspn、strcspn等)

str1中‘f ’ 'a'    'b'     'c'没有在str2中出现直至到‘5’停止累计,退出。

注:strspn和strcspn功能相反。

strtok函数:

字符串函数(strlen、strcmp、strcat、strncat、strncpy、strncmp、strchr、strrchr、strpbark、strstr、strspn、strcspn等)

即char *strtok(char *str,const char *sep)

注:sep参数字符串,定义了用作分隔符(逗号,句号,空格等)的字符集合;

第一个参数指定一个字符串,它包含了0个或者多个由sep字符串中一个或多个分隔符分割的标记;

strtok函数找到有效的分割符(有效分隔符是指分隔符前有字符串,如果没有,继续查找分隔符),将其设置为'\0',并将分隔符前的字符串返回;

对str1字符串进行分割,第一次将第一个参数设置为str1,以后将第一个参数设置为NULL,这时将在被保存位置开始,查找下一个分隔符;

如果字符串中不存在分隔符,则返回NULL指针。

字符串函数(strlen、strcmp、strcat、strncat、strncpy、strncmp、strchr、strrchr、strpbark、strstr、strspn、strcspn等)

注意:strtok的第一个参数为char *,而不是const char *,所以char *str="- This,a sample string."错误,同理字符常量区不可修改。

strerror函数:

字符串函数(strlen、strcmp、strcat、strncat、strncpy、strncmp、strchr、strrchr、strpbark、strstr、strspn、strcspn等)

为什么会存在strerror函数?

一个函数执行既有成功,也有失败,也有执行到中途因为某种原因导致程序崩溃。c语言提供全局变量,当调库函数出现错误时,errno会被设置为对应的错误码。计算机识别数字,而程序员识别字符,所以需要strerror函数将错误码转为字符串,方便程序员识别。

本函数在Linux平台解释。

首先了解下有多少错误码:

字符串函数(strlen、strcmp、strcat、strncat、strncpy、strncmp、strchr、strrchr、strpbark、strstr、strspn、strcspn等)

结果为:

字符串函数(strlen、strcmp、strcat、strncat、strncpy、strncmp、strchr、strrchr、strpbark、strstr、strspn、strcspn等)

还有错误码,没有截完整。

下来,验证下,错误码对应的字符串:

字符串函数(strlen、strcmp、strcat、strncat、strncpy、strncmp、strchr、strrchr、strpbark、strstr、strspn、strcspn等)

结果为:

字符串函数(strlen、strcmp、strcat、strncat、strncpy、strncmp、strchr、strrchr、strpbark、strstr、strspn、strcspn等)

注:没有文件mymain.c,从上图可看出错误码对应No such file or directory。