在C语言中,有许多常见的字符串函数,它们用于处理和操作字符串。以下是一些主要的字符串函数:
-
strlen(const char *str)
: 这个函数返回字符串str
的长度,不包括末尾的空字符\0
。//模拟实现strlen size_t my_strlen(const char* arr) { assert(arr != NULL); int count = 0; while (*arr++ != '\0') { count++; } return count; } int main() { char a[] = { "hello world" }; size_t count = my_strlen(a); printf("%zd\n", count); return 0; }
strcpy(char *dest, const char *src)
: 这个函数将字符串src
(包括\0
)复制到dest
。注意,dest
必须有足够的空间来容纳src
的内容。//模拟实现strcpy void my_strcpy(char* b, const char* a) { assert(b && a); while (*b++ = *a++) { ; } } int main() { char a[] = { "hello world" }; char b[20] = { "0" }; my_strcpy(b, a); printf("%s\n", b); return 0; }
strcat(char *dest, const char *src)
: 这个函数将字符串src
追加到dest
的末尾。dest
必须有足够的空间来容纳原始内容和src
的内容。//模拟实现strcat void my_strcat(char* a, char* b) { assert(a && b); char* ret = a; while (*ret != '\0') { ret++; } while (*b != '\0') { *ret++ = *b++; } *ret = '\0'; } int main() { char a[20] = { "hello " }; char b[] = { "world" }; my_strcat(a, b); printf("%s\n", a); return 0; }
strcmp(const char *str1, const char *str2)
: 这个函数比较两个字符串str1
和str2
。如果str1
和str2
相同,则返回0;如果str1
小于str2
,则返回负数;如果str1
大于str2
,则返回正数。/模拟实现strcmp #include<assert.h> #if 0 int my_strcmp(const char* a, const char* b) { assert(a && b); while ((*a == *b) && (*a != '\0')) { a++; b++; } return *a - *b; } int main() { char arr1[] = "abcde"; char arr2[] = "abd"; int ret = my_strcmp(arr1, arr2); printf("%d\n", ret); return 0; }
strncmp(const char *str1, const char *str2, size_t n)
: 这个函数类似于strcmp
,但只比较前n
个字符。//ģʵstrncpy char* my_strncpy(char* des, const char* sou, size_t num) { assert(des && sou); char* ret = des; while (num--) { *des++ = *sou++; } *des='\0'; return ret; } int main() { char arr1[] = "hello world"; char arr2[20] = { 0 }; my_strncpy(arr2, arr1, 7); puts(arr2); return 0; }
strstr(const char *str1, const char *str2)
: 这个函数在字符串str1
中查找字符串str2
的第一次出现,并返回指向该位置的指针。如果未找到,则返回NULL。//模拟实现strstr char* my_strstr(const char* str1, const char* str2) { const char* a = NULL; const char* b = NULL; const char* cul = str1; while (*cul) { a = cul; b = str2; while (*a != '\0' && *b != '\0' && *a == *b) { a++; b++; } if (*b == '\0') { return cul; } cul++; } return NULL; } int main() { char arr1[] = "abbbcef"; char arr2[] = "bbc"; char* ret = my_strstr(arr1, arr2); if (ret == NULL) { printf("找不到\n"); } else { printf("%s\n", ret); } return 0; }
- int atoi(const char *str)用于将字符串转换为整数
//模拟实现atoi int my_atoi(const char* ch) { int tmp = 0; while (*ch != '\0') { tmp = tmp * 10 + (*ch - '0'); ch++; } return tmp; } int main() { char a[] = "1234"; int num = my_atoi(a); printf("%d\n", num); return 0; }
在C语言中,有许多常见的内存函数,它们用于处理和操作相比于字符串函数限制更少。以下是一些主要的内存函数:
- memcpy():此函数用于从源内存区域复制数据到目标内存区域。它接受三个参数,即目标内存区域的指针、源内存区域的指针和要复制的数据大小(以字节为单位)。需要注意的是,
memcpy
所拷贝的内容不能是重叠的内存。//模拟实现memcpy #include<string.h> void* my_memcpy(void* arr, const void* ch, size_t a) { char* ret = arr; assert(arr && ch); while (a--) { *(char*)arr = *(const char*)ch; ((char*)arr)++; ((char*)ch)++; } /*for (int i = 0; i < a; i++) { arr[i] = ch[i]; }*/ return ret; } int main() { char arr[20] = { 0 }; char ch[] = "hello world!"; my_memcpy(arr, ch, 5); printf("%s\n", arr); return 0; }
- memmove():此函数类似于
memcpy()
,但它可以处理重叠的内存区域。也就是说,即使目标内存与源头内存是同一个内存,且源头内存与目标内存要拷贝的内存重叠,memmove
也可以正确完成拷贝。 - 还有许多相关函数,请持续关注更新
这些函数都定义在<string.h>
头文件中,因此在使用这些函数之前,你需要包含这个头文件。
请注意,使用这些字符串函数时,需要确保目标字符串有足够的空间来容纳源字符串或操作结果,以避免缓冲区溢出和相关的安全问题。对于涉及用户输入或不确定长度字符串的情况,尤其需要小心处理。
感谢观看,可以点点关注爱心收藏,大家的支持是我创作的动力!