字符串复制函数
【摘要】 字符串复制函数,自定义字符串复制函数,在字符串里找字符。
1. strcpy
- char * strcpy(char * restrict dst,const char * restrict src);
- 把src的字符串拷贝到dst
- restrict表明src和dst不重叠(C99)
- 返回dst
- 为了能链起代码来
- 为了让函数strcpy能直接参与运算,所以函数strcpy的返回值是char * 的dst
2. 复制一个字符串
- char * dst =(char*)malloc(strlen(src)+1)
- strcpy(dst,src);
- 不知道这个东西需要多少内存,所以需要动态规划一个内存
- 这个长度strlen(src)是存内容的长度,不包括结尾“\0”,所以需要+1
- 返回值类型是(void * ),转换为(char * )
- 初学者经常犯的错误就是忘了+1。
3. 自己写一个strcpy函数相同功能的函数
#include <stdio.h>
#include <string.h>
char *mycpy(char *dst, const char *src) {
// int idx = 0;
// while(src[]!='\0') {
// dst[idx]=src[idx];
// idx++;
// }
// dst[idx]='\0';
char *ret = dst;
while (*dst++ = *src++);
*dst = '\0';
return ret;
}
int main(int argc, char const *argv[]) {
char s1[] = "abc";
char s2[] = "abc";
printf("%c", s1);
printf("%c", s2);
printf("%d", strcpy(s1, s2));
return 0;
}
4. 字符串中找字符
- char * strchr(const char * s,int c);
- 从左边找在s字符串里c第一次出现的位置
- char * strrchr(const char * s,int c);
- 从右边找在s字符串里c第一次出现的位置
- 返回NULL表示没有找到
- 返回非NULL表示找到了,指针指向要找的字符
- 问题:如何寻找字符第2次出现的位置
#include <stdio.h>
#include <string.h>
int main(int argc, char const *argv[]) {
char s[] = "hello";
char *p = strchr(s, 'l');
p = strchr(p + 1, 'l');
printf("%s\n", p);
return 0;
}
这个代码写的是,在s这个字符串里找‘l’,找到后把这个指针赋值给p,也就是说可以通过p访问找到的l的位置。所以p第一次输出的就是‘llo’,如果我们想找到第二个l,就可以在p这个字符串里,开始strchr,但是p里面的第一个字母也是l,所以我们就可以让p+1,这样就可以找出来第二个l了。\
5. 找到这个字符,把字符及其后面的字符复制到另外一个变量里去。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, char const *argv[]) {
char s[] = "hello";
char *p = strchr(s, 'l');
char *t = (char *)malloc(strlen((p)+ 1);
strcpy(t, p);
printf("%s\n", p);
printf("%s\n", t);
free(t);
return 0;
}
这个程序说的是,我们先定义一个t,然后动态规划一下他的大小,因为这个t是用来复制p的字符串的,所以需要p的字符串长度,(为什么strlen后还需要+1呢?)然后再用string.h里的字符串赋值函数把p的内容复制在t里。最后不要忘记了释放t。
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)