C语言:字符串拷贝(截取)、查找
作者: SegmentFault博客 更新时间:2020-02-28 15:12:37 原文链接
C语言:字符串拷贝(截取)、查找
很惭愧,学了这么久别的语言,一直没有好好学C和C++,所以现在开始认真C/C++的一些特性和比较,这里记录下C语言拷贝和截取的一些方式,由于系统库带的函数不方便,所以自己写了几个工具小函数来使用。
字符串拷贝
我们也可以使用 strncpy 函数或者 memcpy 方式来复制。
#include <stdio.h> #include <stdlib.h> #include <string.h> #define N (10) int main() { char* p1 = "abcde"; char* p2 = (char*)malloc(sizeof(char) * N); char* p3 = (char*)memcpy(p2, p1, N); printf("p2 = %s\np3 = %s\n", p2, p3); free(p2); p2 = NULL; p3 = NULL; system("pause"); return 0; }
运行结果:
p2 = abcde
p3 = abcde
代码说明:
1) 代码首先定义p1,p2,p3三个指针,但略有不同,p1指向一个字符串字面值,给p2分配了10个字节的内存空间。
2) 指针p3通过函数memcpy直接指向了指针p2所指向的内存,也就是说指针p2、p3指向了同一块内存。然后打印p2,p3指向的内存值,结果是相同的。
3) 最后按照好的习惯释放p2,并把p3也置为NULL是为了防止再次访问p3指向的内存,导致野指针的发生。
我们也可以自己写一个简单的字符串拷贝函数来进行拷贝。
/* 由于 C 语言的字符串拷贝函数不是很好用,自己可以写一个简单的拷贝函数 dst 为目标地址 src 为源字符串地址 n 为复制的长度 */ char *copy(char *dst, char *src, int n) { char *p = src; char *q = dst; int len = strlen(src); if(n > len) n = len; while (n--) { *(q++) = *(p++); } *(q++)='\0'; // 在末尾添加上 return dst; }
字符串查找
我们可以使用 string.h
中的系统函数来进行子字符串的查找。
/* 字符串查找可以使用 strstr 函数 */ char a[100] = "abcdefgh"; char b[100] = "cd"; char *p = strstr(a, b); printf("b is at a: %d\n", p-a+1);