十字符函数和字符串函数(看这一篇就够用啦)
Posted I am Supreme
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了十字符函数和字符串函数(看这一篇就够用啦)相关的知识,希望对你有一定的参考价值。
目录
strcpy:把从src地址开始且含有NULL结束符的字符串复制到以dest开始的地址空间。
strcat:将参数dest字符串和参数src字符串拼接起来
strncp:把src所指向的字符串中以src地址开始的前n个字节复制到dest所指的数组中,并返回被复制后的dest。
strncat:把src所指字符串的前n个字符添加到dest所指字符串的结尾处,并覆盖dest所指字符串结尾的'\\0',从而实现字符串的连接。
strstr:strstr返回一个指针,指向string2在string1中首次出现的位置
memmove:由src所指内存区域复制num个字节到dest所指内存区域.
memset:将s中当前位置后面的n个字节 (typedef unsigned int size_t )用 c 替换并返回 s 。
memcmp: 比较ptr1和ptr2指针开始的num个字节。
strlen:求字符串长度
size_t strlen ( const char * str );
- 字符串已经 '\\0' 作为结束标志,strlen函数返回的是在字符串中 '\\0' 前面出现的字符个数(不包含 '\\0' )。
- 参数指向的字符串必须要以 '\\0' 结束。
- 注意函数的返回值为size_t,是无符号的( 易错 )
#include <stdio.h>
int main()
const char*str1 = "abcdef";
const char*str2 = "bbb";
if(strlen(str2)-strlen(str1)>0)
printf("str2>str1\\n");
else
printf("srt1>str2\\n");
return 0;
strcpy:把从src地址开始且含有NULL结束符的字符串复制到以dest开始的地址空间。
char* strapy(char * destination,const char * source);
- 源字符串必须以 '\\0' 结束。
- 会将源字符串中的 '\\0' 拷贝到目标空间。
- 目标空间必须足够大,以确保能存放源字符串。
- 目标空间必须足够大。
strcat:将参数dest字符串和参数src字符串拼接起来
char * stract ( char destination, const char * source);
- 源字符串必须以 '\\0' 结束。
- 目标空间必须足够大,能容纳下源字符串的内容。
- 目标空间必须可修改。
strcmp:将两个字符串进行比较。
int strcmp(const char * str1 ,const char * str2);
- 第一个字符串大于第二个字符串,则返回大于0的数字
- 第一个字符串等于第二个字符串,则返回0
- 第一个字符串小于第二个字符串,则返回小于0的数字
strncp:把src所指向的字符串中以src地址开始的前n个字节复制到dest所指的数组中,并返回被复制后的dest。
char * strncpy( char * destination,const char *source,size_t num);
- 拷贝num个字符从源字符串到目标空间。
- 如果源字符串的长度小于num,拷贝完源字符串后,早目标的后边追加0,直到num个。
strncat:把src所指字符串的前n个字符添加到dest所指字符串的结尾处,并覆盖dest所指字符串结尾的'\\0',从而实现字符串的连接。
char * strncat ( char * destination,const char * source,size_t num);
- dest要有足够的空间来容纳要拷贝的字符串
- strncat会将dest字符串最后的’\\0’覆盖掉,字符追加完成后,再追加’\\0’
strncmp:用来比较s1和s2字符串的前n个字符。
int strncmp(const char * str1,const char * str2,size_t num)
- 比较到出现两个字符不一样或者一个字符串结束,或者num个字符全部比较完。
- 第一个字符串小于第二个字符串,则返回小于0的数字
- 第一个字符串等于第二个字符串,则返回0
- 第一个字符串大于第二个字符串,则返回小大于0的数字
字符串查找
strstr:strstr返回一个指针,指向string2在string1中首次出现的位置
char * strstr(const char *,const char *);
- 返回一个指针,指向str1中str2的第一个元素
- 如果str2不在str1中,则返回一个空指针。
内存操作函数
memcpy:从源source所指的内存地址的起始位置开始拷贝n个字节到目标destin所指的内存地址的起始位置中.
void * memcpy( void * destination,const void * source,size_t num);
#include<stdio.h>
#include<string.h>
struct
char name[40];
int age;
person, person_copy;
int main()
//memcpy example
char myname[] = "Pierre de Fermat";
/* using memcpy to copy string: */
memcpy(person.name, myname, strlen(myname) + 1);
person.age = 46;
/* using memcpy to copy structure: */
memcpy(&person_copy, &person, sizeof(person));
printf("person_copy: %s, %d \\n", person_copy.name, person_copy.age);
return 0;
- 函数memcpy从source的位置开始向后复制num个字节的数据到destination的内存位置。
- 这个函数在遇到 '\\0' 的时候并不会停下来。
- 如果source和destination有任何的重叠,复制的结果都是未定义的。
memmove:由src所指内存区域复制num个字节到dest所指内存区域.
void memmove (void * destination,const void * source,size_t num);
- 和memcpy的差别就是memmove函数处理的源内存块和目标内存块是可以重叠的。
- 如果源空间和目标空间出现重叠,就得使用memmove函数处理。
#include<stdio.h>
#include<string.h>
int main()
char str[] = "memmove can be very useful......";
memmove(str + 20, str + 15, 11);
puts(str);
return 0;
memset:将s中当前位置后面的n个字节 (typedef unsigned int size_t )用 c 替换并返回 s 。
void * memset(void *s, int c, size_t n);
- s指向要填充的内存块。
- c是要被设置的值。
- n是要被设置该值的字符数。
- 返回类型是一个指向存储区s的指针。
memcmp: 比较ptr1和ptr2指针开始的num个字节。
int memcmp(const void * ptr1,const void * ptr2,size_t num)
- 第一个字符串小于第二个字符串,则返回小于0的数字
- 第一个字符串等于第二个字符串,则返回0
- 第一个字符串大于第二个字符串,则返回小大于0的数字
#include<stdio.h>
#include<string.h>
int main()
char buffer1[] = "DWgaOtP12df0";
char buffer2[] = "DWGAOTP12DF0";
int n;
n = memcmp(buffer1, buffer2, sizeof(buffer1));
if (n > 0) printf("'%s' is greater than '%s'.\\n", buffer1, buffer2);
else if (n < 0) printf("'%s' is less than '%s'.\\n", buffer1, buffer2);
else printf("'%s' is the same as '%s'.\\n", buffer1, buffer2);
return 0;
以上是关于十字符函数和字符串函数(看这一篇就够用啦)的主要内容,如果未能解决你的问题,请参考以下文章