字符串
1.strlen字符串长度计算
int main(){ int len = "abcdef"; printf("%d\n", strlen(len)); // 6; strlen求字符串长度,返回 unsigned int(注:如果比较不会小于0); 字符串里必须要有 \0 return 0; }
2.strcat\strncat字符串追加
int main(){ char arr1[20] = "hello"; char arr2[] = "world"; strcat(arr1, arr2); printf("%s\n", arr1); // helloword 注意:被追加元素的大小要放的下追加之后的总大小;追加时只认被追加元素的\0 return 0; } -------------------- 限制个数strncat -------------------- int main(){ char arr1[20] = "hello"; char arr2[] = "world"; strncat(arr1, arr2, 2); printf("%s\n", arr1); // hellowo 注意:被追加元素的大小要放的下追加之后的总大小;追加时只认被追加元素的\0 return 0; }
3.strcpy\strncpy字符串拷贝
int main(){ char arr1[] = "abcdef"; char arr2[] = "gg"; printf("%s", strcpy(arr1, arr2)); // gg; strcpy拷贝字符串,返回目的地,将arr2拷贝到arr1; arr1所占空间要大于arr2 //printf("%s", strcpy(arr1, "hehe")); // hehe return 0; } -------------------- 限制个数strncpy -------------------- int main(){ char arr1[8] = "abc"; char arr2[] = "hello word"; strncpy(arr1, arr2, 7); // 记得会把 \0 也拷贝过去,所以其实拷贝了8个;如果你拷贝了3个但是其实只有1个会补2个0 printf("%s", arr1); return 0; }
4.strcmp\strncmp字符串比较
int main(){ // strcmp字符串比较,从第一个字符开始比较; 第一个大于第二个返回大于0的数,相同返回0,第一个小于第二个返回小于0的数,ascii码值比较 char* p1 = "abc"; char* p2 = "sbx"; int tem = strcmp(p1,p2); printf("%d\n",tem); // -1 return 0; } -------------------- 限制个数strncmp -------------------- int main(){ char* p1 = "avdf"; char* p2 = "avda"; int tem = strncmp(p1, p2, 3); printf("%d", tem); // 0 ; 只比较前三个 return 0; }
5.strstr查找字符串
int main(){ // 查找字符串strstr char* p1 = "abcdefaadef"; char* p2 = "def"; char* tem = strstr(p1,p2); if (tem == NULL){ printf("没有匹配到\n"); } else{ printf("%s\n", tem); }; // defaadef ; 如果没有匹配到返回空指针,否则返回p1的开始的def到 \0 return 0; }
6.分割字符串strtok
int main(){ // 分割字符串strtok,会修改源数据所以先备份一下比较好 char arr[] = "apqo@klks.tech"; char* p = "@."; char buf[30]; strcpy(buf,arr); //1: //char* tem = strtok(buf, p); //printf("%s\n", tem); // apqo //tem = strtok(NULL, p); //printf("%s\n", tem); // klks //tem = strtok(NULL, p); //printf("%s\n", tem); // tech //printf("%s\n", arr); // apqo@klks.tech //2: char* ret = NULL; for (ret = strtok(buf, p); ret != NULL; ret = strtok(NULL, p)){ printf("%s\n", ret); // apqo \n klks \n tech } return 0; }
7.错误信息strerror
int main(){ // 错误信息strerror,错误码有很多可选择 //char* str = strerror(0); //printf("%s\n", str); //No error //char* str = strerror(1); //printf("%s\n", str); //Operation not permitted //char* str = strerror(2); //printf("%s\n", str); //No such file or directory //errno是一个全局错误码的变量,C语言程序在运行时发生了错误会自动把相应的错误码返给你,需要头文件 #include <errno.h> FILE* pf = fopen("text.txt", "r"); // fopen基于stdio.h if (pf == NULL){ printf("%s\n", strerror(errno)); } else{ printf("打开文件成功"); } return 0; }
8.判断字符大小写及其它
// 需要头文件 ctype.h; 返回非0的数字表示就成立
tolower: 大写转小写:char ch = tolower('Q'); putchar(ch);// q
toupper: 小写转大写
9.内存函数
1.内存拷贝 mencpy
int main(){ // 内存拷贝 mencpy int i = 0; int arr1[] = {1,2,3,4,5}; int arr2[5] = { 0 }; memcpy(arr2, arr1, sizeof(arr1)); // 第三个参数是要拷贝多少字节 for (i = 0; i < 5; i++){ printf("%d ", arr2[i]); // 1 2 3 4 5 } return 0; } ----------------- 拷贝结构体 ----------------- struct ss{ char name[20]; int age; }; int main(){ struct ss arr3[] = { { "张三", 20 }, {"李四", 18} }; struct ss arr4[3] = { 0 }; memcpy(arr4, arr3, sizeof(arr3)); printf("%s", arr4[0].name); // 张三 return 0; }
2.内存拷贝重叠处理(也可以处理不重叠的)menmove
int main(){ // 处理内存拷贝重叠 menmove int arr[] = {1,2,3,4,5,6,7,8,9,10}; int i = 0; memmove(arr + 2, arr, 20); // 第三个参数是要拷贝多少字节 for (i = 0; i < 10; i++){ printf("%d ", arr[i]); // 1 2 1 2 3 4 5 8 9 10 } return 0; }
3.内存比较 mencmp
int main(){ // 内存比较 mencmp int arr1[] = {1,2,3,4,5}; int arr2[] = {1,2,5,4,3}; int ret = memcmp(arr1, arr2, 8); // 8 表示字节 printf("%d\n", ret); // 0; 表示前8个字节一样;不一样是-1 return 0; }
4.内存设置 menset
int main(){ // 内存设置 menset //char arr[10] = ""; //memset(arr, '#', 9); // 9表示字节;会加一个隐藏的 \0 实际是10个 //printf("%s", arr); // ######### int arr[10] = {0}; int i = 0; memset(arr, 1, 40); for (i = 0; i < 10; i++){ printf("%d ", arr[i]); } return 0; }