很惭愧,学了这么久别的语言,一直没有好好学C和C++,因此如今开始认真C/C++的一些特性和比较,这里记录下C语言拷贝和截取的一些方式,因为系统库带的函数不方便,因此本身写了几个工具小函数来使用。git
咱们也能够使用 strncpy 函数或者 memcpy 方式来复制。github
#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所指向的内存,也就是说指针p二、p3指向了同一块内存。而后打印p2,p3指向的内存值,结果是相同的。指针
3) 最后按照好的习惯释放p2,并把p3也置为NULL是为了防止再次访问p3指向的内存,致使野指针的发生。code
咱们也能够本身写一个简单的字符串拷贝函数来进行拷贝。blog
/* 因为 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);