字符串函数
1.strlen函数 求字符串长度的
2. strcpy 字符串拷贝
3、strcat 字符串连接
先找到需要连接的字符串末端'\0'处,然后拷贝
拷贝是在\0这里进行拷贝。
4.strcmp-字符串比较函数。
因为这个是二个不同的数组名,他们比较的肯定不一样,因为首元素地址不同,所以比较就不相同,这里比较的不是内容,是地址。
比较二个字符串应该用strcmp函数
这个代码关键就是*arr1和*arr2相同的情况下遇到'\0时应该终止循环,返回相等。
1.strncpy -字符串拷贝。
2.strncat(字符串连接)
加了n就是加了限定的条件,比如strncmp
3.strstr -----查找子串
如果找到了子串就返回第一个字符的地址,也就是b字符的地址,因为是从b字符开始才算找到子串。找不到返回空指针,NULL
//模拟实现一下strstr
char* my_strstr(char* arr1, char* arr2)
{
char* s1 = arr1;
char* s2 = arr2;
char* p = arr1;
while (*p)
{
s1 = p;
s2 = arr2;
while (*s1 != '\0' && *s2 != '\0' && *s1 == *s2)
{
s1++;
s2++;
}
if (*s2 =='\0')
{
return p;
}
p++;
}
return NULL;
}
int main()
{
char arr1[] = "www.h";
char arr2[] = "w.h";
char* ret = my_strstr(arr1, arr2);
if (ret == NULL)
{
printf("子串不存在\n");
}
else
{
printf("%s\n", ret);
}
return 0;
}
strtok函数
//strcok()函数
#include <string.h>
int main()
{
char arr1[] = "zhangsan@1666.com";
char arr2[30] = { 0 };
strcpy(arr2, arr1);
const char* p = "@.";
char* s2 = NULL;
// 初始化只是初始话一次
for (s2= strtok(arr2, p); s2 != NULL; s2=strtok(NULL, p))
{
printf("%s\n", s2);
}
return 0;
}
3. strerror?函数的使⽤?
strerror函数可以把参数部分错误码对应的错误信息的字符串地址返回来。?
在不同的系统和C语⾔标准库的实现中都规定了⼀些错误码,⼀般是放在 errno.h 这个头⽂件中说明
的,C语⾔程序启动的时候就会使⽤⼀个全⾯的变量errno来记录程序的当前错误码,只不过程序启动
的时候errno是0,表⽰没有错误,当我们在使⽤标准库中的函数的时候发⽣了某种错误,就会讲对应
的错误码,存放在errno中,⽽⼀个错误码的数字是整数很难理解是什么意思,所以每⼀个错误码都是
有对应的错误信息的。strerror函数就可以将错误对应的错误信息字符串的地址返回。?
#include <errno.h>
int main()
{
for (int i = 0; i < 10; i++)
{
printf("%s\n", strerror(i));
}
return 0;
}
4.memcpy -内存拷贝
模拟实现memcpy函数
void* my_memcpy(void* dest, void* src,size_t num)
{
char* ret = dest;
while (num--)
{
*(char*)dest = *(char*)src;
dest = (char*)dest + 1;
src = (char*)src + 1;
}
return ret;
}
int main()
{
int arr1[10] = { 1,2,3,4,5,6,7,8,9,10 };
my_memcpy(arr1 + 2, arr1, 20);
for (int i = 0; i < 10; i++)
{
printf("%d ", arr1[i]);
}
return 0;
}
//不能解决重叠问题
重叠问题
memmove使⽤和模拟实现
int main()
{
int arr1[10] = { 1,2,3,4,5,6,7,8,9,10 };
memmove(arr1 + 2, arr1, 20);
for (int i = 0; i < 10; i++)
{
printf("%d ", arr1[i]);
}
return 0;
}
//不能解决重叠问题
memset函数的使⽤
//memset内存设置
int main()
{
char arr[] = "hello bite";
memset(arr, 'x', 5);//以字节为单位来设置的
printf("%s\n", arr);
return 0;
}
memcmp函数的使⽤