字符串和内存函数的介绍
2021/4/20 7:29:10
本文主要是介绍字符串和内存函数的介绍,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
1.字符串长度
实现方式
int my_strlen(const char a[]) { int i = 0, count = 0; while (a[i] != '\0') { count++; i++; } return count; } int main() { char a[] = "abcxccxdef"; int ret=my_strlen(a); printf("%d", ret); }
例如:我们来看一下strlen的另一个特点,它的返回值是size-t,是无符号整型,但是我们自己写的是返回的是整型。
2.strcpy字符串拷贝函数
长度不受限制的字符串函数 1.字符串拷贝函数 2.会拷贝源字符串的‘\0’;也就是会覆盖目标字符串的内容。
实现方式
char* my_strcpy(char* a, const char* b) { char* ret = a; //判断b数组起始位置不为‘\0’; while (*b != '\0') { *a = *b; a++; b++; } //*b 这时指向‘\0’,把它拷贝到a中。 *a = *b; return ret; } int main() { char a[10] = "abcdef"; char b[] = "bcdef"; char* ret=my_strcpy(a, b); printf("%s", ret); return 0; }
3.strcat追加字符串函数
实现方式
char * my_strcat(char* a, const char* b) { char* ret = a; //遍历数组a,使得a指向‘\0’; while (*a != '\0') { *a++; } //把数组b中的元素追加到a中,此时的a已经指向'\0.' while (*b != '\0') { *a = *b; *a++; *b++; } //此时的b为'\0',把它也追加到a中 *a = *b; return ret; } int main() { char a[20] = "abcdef"; char b[] = "wxl"; char* ret=my_strcat(a, b); printf("%s", ret); return 0; }
4.strcmp字符串比较函数
实现方式
int my_strcmp(const char *a, const char *b) { while (*a == *b) { if (*a == '\0') { //相等 return 0; } a++; //相等的情况下继续比较下一对字符。 b++; } if (*a > *b) { //大于 return 1; } else return -1; //小于 } int main() { char a[] = "abcdef"; char b[] = "abhhhh"; int ret = my_strcmp(a, b); printf("%d", ret); return 0; }
长度受限制的字符串函数介绍
1.strncpy
int main() { char a[10] = "hhahadd"; char b[] = "abcdefghighik"; strncpy(a, b, 5); printf("%s", a); }
注意点第二项:
2.strncat
int main() { char arr1[30] = "abcdef"; char arr2[] = "ghijk"; strncat(arr1, arr2, 3); printf("%s", arr1); }
3.strncmp
int main() { char a[] = "abcdef"; char b[] = "abcwef"; int ret = strncmp(a, b, 4); printf("%d\n", ret); }
字符串查找
1.strstr
实现方式
char* my_strstr(const char* a, const char* b) { char* p1 = (char *)a; char* p2 = (char * ) b; char* cur = (char * )a; while (*cur != '\0') { p1 = cur; p2 = (char * )a; while ((*p1 != '\0') && (*p2 != '\0') && (*p1 == *p2)) { p1++; p2++; } cur++; if(*p1='\0'){ //当p1等于‘\0’时,直接终止。 return NULL; if (*p2 == '\0') { return cur; //当p2为'\0'的时候,直接返回cur指向的地址,进行打印; } } return NULL; //没找到 } int main() { char a[] = "abbbcefg"; char b[] = "bbc"; char* ret = my_strstr(a, b); if (ret == NULL) { printf("字串不存在"); } else { printf("%s", ret); } }
2.strtok
3.strerror错误信息报告
char *str = strerror(errno);
小写转大写
#include <ctype.h> int main() { int i = 0; char a[] = "I Am a Student"; while (a[i] != '\0') { if (isupper( a[i])) { a[i] = tolower(a[i]); } i++; } return 0; }
内存操作函数
1.memcpy
实现方式
void* my_memcpy(void* dest, const void* str, size_t num) { void* ret =dest; while (num--) { *(char*) dest = *(char* )str; ++(char *)dest; ++(char *)str; } return ret; } int main() { int a[] = { 1,2,3,4,5,6 }; int b[10] = { 0 }; my_memcpy(a, b, sizeof(a)); return 0; }
2.memove
实现方式
void* my_memcpy(void* dest, const void* str, size_t num) { void * ret = dest; if(dest<str){ //从前往后 while (num--) { *(char*)dest = *(char*)str; ++(char *)dest; ++(char *)str; } } else { //从后-前 while (num--) { *((char *)dest + num) = *((char *)str + num); } } return ret; } int main() { int a[] = { 1,2,3,4,5,6,7,8,9,10 }; my_memcpy(a+3, a, 20); return 0; }
3.memset内存设置函数
int main() { char arr1[10] = ""; memset(arr1, '#', 10); //把arr1重置#号,数量为10个 printf("%s", arr1); }
4.memcmp
int main() { int arr1[] = { 1,2,3,4,5,6 }; int arr2[] = { 1,2,5,6,4,7 }; int ret = memcmp(arr1, arr2, 8); //比较前八个字节,也就是两个整型,1和2比较 printf("%d", ret); return 0; }
这篇关于字符串和内存函数的介绍的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-05-09聊聊如何通过arthas-tunnel-server来远程管理所有需要arthas监控的应用
- 2024-05-09log4j2这么配就对了
- 2024-05-09nginx修改Content-Type
- 2024-05-09Redis多数据源,看这篇就够了
- 2024-05-09Google Chrome驱动程序 124.0.6367.62(正式版本)去哪下载?
- 2024-05-09有没有大佬知道这种数据应该怎么抓取呀?
- 2024-05-09这种运行结果里的10.100000001,怎么能最快改成10.1?
- 2024-05-09企业src漏洞挖掘-有意思的命令执行
- 2024-05-08阿里云域名注册流程,分享给第一次购买域名的新手站长!
- 2024-05-082024年,行业变动下的程序员应该首先学习哪种编程语言?