字符串处理函数"/>
C语言入门17 字符串处理函数
一、strlen:统计字符串长度
不会统计字符串中结束符 \0 。
#include<stdio.h>
#pragma warning(disable:4996)
int main()
{char str1[20] = "hello";char* str2 = "hello";printf("strlen(str1) = %d\n", strlen(str1));//5printf("strlen(str2) = %d\n", strlen(str2));//5return 0;
}
二、strcpy:拷贝字符串
在使用此函数时,必须保证dest(目标字符串)指向的空间足够大,不然会出现内存污染。所谓内存污染,就是当dest内存不够时,不会停止拷贝,而是会继续拷贝下去,将原本不属于dest的内存也进行了操作,这就是内存污染。这也是微软的VS为啥不让我们使用strcpy的原因(使用#pragma warning(disable:4996)
可以继续使用)。\0也会被拷贝。
#include<stdio.h>
#pragma warning(disable:4996)
int main()
{char str[100] = "aaaaaaaaaa";strcpy(str, "hello"); printf("str = %s\n", str);//hello,不继续输出证明了\0也会被拷贝printf("str+6 = %s\n", str+6);//aaaa, 证明后面的字符不会发生变化return 0;
}
三、strncpy:拷贝字符串
拷贝前n个字节,并且不拷贝\0。
#include<stdio.h>
#pragma warning(disable:4996)
int main()
{char str[100] = "aaaaaaaaaa";strncpy(str, "hello",3); printf("str = %s\n", str);//helaaaaaaareturn 0;
}
四、strcat:字符串追加
同样必须保证目标字符串的空间足够大,否则内存污染。会追加\0。
#include<stdio.h>
#pragma warning(disable:4996)
int main()
{char str[100] = "abcdefgh";char* src = "hello";strcat(str, "hello"); printf("str = %s\n", str);//abcdefghhelloreturn 0;
}
五、strncat:字符串追加
追加src的前n个字符到目标字符串后面。会追加\0。
#include<stdio.h>
#pragma warning(disable:4996)
int main()
{char str[100] = "abcdefgh";char* src = "hello";strncat(str, "hello",3); printf("str = %s\n", str);//abcdefghhelreturn 0;
}
六、strcmp:比较字符串大小
比较方法:从第0个元素开始,逐个字符比较ASCII码,一旦比较出大小就返回。如果所有都一样,就返回0。如果s1>s2返回1,小于则返回-1。
#include<stdio.h>
#pragma warning(disable:4996)
int main()
{char* str1 = "hello";char* str2 = "world";char* str3 = "hello";printf("strcmp(str1,str2) = %d\n", strcmp(str1, str2));//-1printf("strcmp(str1,str3) = %d\n", strcmp(str1, str3));//0printf("strcmp(str2,str3) = %d\n", strcmp(str2, str3));//1return 0;
}
七、strncmp:比较字符串大小
相比strcmp,多个参数,只比较前n个字符,比较方式一致。
#include<stdio.h>
#pragma warning(disable:4996)
int main()
{char* str1 = "hello world";char* str2 = "hello abcdr";printf("strncmp(str1,str2) = %d\n", strncmp(str1, str2, 6));//0printf("strncmp(str2,str3) = %d\n", strncmp(str1, str2, 7));//1return 0;
}
八、strchr:字符查找函数
注意:是首次匹配,如果有多个,只返回第一个。找到就返回字符的地址,找不到返回NULL。
#include<stdio.h>
#pragma warning(disable:4996)
int main()
{char* str = "hello world";printf("strchr(str, 'g') = %x\n", strchr(str, 'g'));//0printf("strchr(str, 'g') = %x\n", strchr(str, 'w'));//87b36printf("w的地址 = %x\n", str + 6);//87b36return 0;
}
九、strrchr:字符查找函数
同strchr相比,找出最后出现的字符(末次匹配)。
#include<stdio.h>
#pragma warning(disable:4996)
int main()
{char* str = "hello worldw";printf("strrchr(str, 'g') = %x\n", strrchr(str, 'w'));//937be7printf("w的地址 = %x\n", str + 11);//937be7return 0;
}
十、strstr:字符串匹配函数
也是首次匹配,找到了就返回匹配到字符串的首字符地址,否则返回NULL。
#include<stdio.h>
#include "helloworld.h"
#pragma warning(disable:4996)
int main()
{char* str = "sfewfgesghg&*&%&^dadw ";printf("strstr(str,""fge"") = %p\n", strstr(str, "fge"));//首地址printf("strstr(str,""acd"") = %p\n", strstr(str, "acd"));//0return 0;
}
十一、menset:空间设定函数
void* menset(void* ptr, int value, size_t num);
将ptr指向的内存空间的num个字节全部赋值为value。超出范围会造成内存污染。
#include<stdio.h>
#pragma warning(disable:4996)
int main()
{char str[12] = "hello world";printf("%s\n", str);//hello worldmemset(str, 'a', 5);printf("%s\n", str);//aaaaa worldreturn 0;
}
更多推荐
C语言入门17 字符串处理函数
发布评论