精华内容
下载资源
问答
  • LinuxC语言字符串函数 - memset

    万次阅读 多人点赞 2018-11-16 00:02:01
    memset是计算机中C/C++语言初始化函数。作用是将某一块内存中的内容全部设置为指定的值, 这个函数通常为新申请的内存做初始化工作 头文件:string.h 函数原型:void *memset(void *s, int c, size_t n); 参数说明:...

    memset是计算机中C/C++语言初始化函数。作用是将某一块内存中的内容全部设置为指定的值, 这个函数通常为新申请的内存做初始化工作

    头文件:string.h

    函数原型:void *memset(void *s, int c, size_t n);

    参数说明:将以s为首的存储空间前n字节空间全部替换为参数c指定的数据

    返回值:更新后的首地址s

    【实例】

    #include <memory.h>
    #include <stdio.h>
    
    void main( void )
    {
       char buffer[] = "This is a test of the memset function";
       printf( "Before: %s\n", buffer );
       memset( buffer, '*', sizeof(buffer)-1 );    //这里buffer的大小-1是为了避免将字符串的结尾‘\0’也变成*
       printf( "After:  %s\n", buffer );
    }

    函数实现

    第一种:

    void* memcpy( void* dest, const void* src, size_t count )
    {
    
    if (count<0)
    
    {
        printf("Invalid count number !./n");
    
        return (void*)0;
    }
    
    if(src==NULL||dest==NULL)
    
        return (void*)0 ;
    
    if ((unsigned int)dest==(unsigned int)src)
    
    {
        printf("The source is equal with the destanation!./n");
    
        return dest;
    }
    
        char* d = (char*)dest;
        const char* s = (const char*)src;
        
        while(count--)
            *d++ = *s++;
    
        return dest;
    }

    另一个实现,和上面类似,转贴高质量C++/C编程指南中的,供参考:

    void *memcpy(void *pvTo, const void *pvFrom, size_t size)
    {
    	assert((pvTo != NULL) && (pvFrom != NULL));     // 使用断言
    
    	byte *pbTo = (byte *) pvTo;     // 防止改变pvTo的地址
    
    	byte *pbFrom = (byte *) pvFrom; // 防止改变pvFrom的地址
    
    	while(size -- > 0 )
    
    		*pbTo ++ = *pbFrom ++ ;
    
    	return pvTo;
    }

     


    我的首发平台是【CodeAllen】,欢迎关注并回复“1024”进入资料群获取免费学习资料

    展开全文
  • 将dest前面count个字符置为字符c. 返回dest的值. void *memmove(void *dest, const void *src, size_t count); 从src复制count字节的字符到dest. 如果src和dest出现重叠, 函数会自动处理. 返回dest的值. void *...
    1. void *memset(void *dest, int c, size_t count);
      将dest前面count个字符置为字符c.
      返回dest的值.

    2. void *memmove(void *dest, const void *src, size_t count);
      从src复制count字节的字符到dest. 如果src和dest出现重叠, 函数会自动处理.
      返回dest的值.

    3. void *memcpy(void *dest, const void *src, size_t count);
      从src复制count字节的字符到dest. 与memmove功能一样, 只是不能处理src和dest出现重叠.
      返回dest的值.

    4. void *memchr(const void *buf, int c, size_t count);
      在buf前面count字节中查找首次出现字符c的位置. 找到了字符c或者已经搜寻了count个字节, 查找即停止.
      操作成功则返回buf中首次出现c的位置指针, 否则返回NULL.

    5. void *_memccpy(void *dest, const void *src, int c, size_t count);
      从src复制0个或多个字节的字符到dest. 当字符c被复制或者count个字符被复制时, 复制停止.
      如果字符c被复制, 函数返回这个字符后面紧挨一个字符位置的指针. 否则返回NULL.

    6. int memcmp(const void *buf1, const void *buf2, size_t count);
      比较buf1和buf2前面count个字节大小.
      返回值< 0, 表示buf1小于buf2;
      返回值为0, 表示buf1等于buf2;
      返回值> 0, 表示buf1大于buf2.

    7. int memicmp(const void *buf1, const void *buf2, size_t count);
      比较buf1和buf2前面count个字节. 与memcmp不同的是, 它不区分大小写.
      返回值同上.

    8. size_t strlen(const char *string);
      获取字符串长度, 字符串结束符NULL不计算在内.
      没有返回值指示操作错误.

    9. char *strrev(char *string);
      将字符串string中的字符顺序颠倒过来. NULL结束符位置不变.
      返回调整后的字符串的指针.

    10. char *_strupr(char *string);
      将string中所有小写字母替换成相应的大写字母, 其它字符保持不变.
      返回调整后的字符串的指针.

    11. char *_strlwr(char *string);
      将string中所有大写字母替换成相应的小写字母, 其它字符保持不变.
      返回调整后的字符串的指针.

    12. char *strchr(const char *string, int c);
      查找字符c在字符串string中首次出现的位置, NULL结束符也包含在查找中.
      返回一个指针, 指向字符c在字符串string中首次出现的位置, 如果没有找到, 则返回NULL.

    13. char *strrchr(const char *string, int c);
      查找字符c在字符串string中最后一次出现的位置, 也就是对string进行反序搜索, 包含NULL结束符.
      返回一个指针, 指向字符c在字符串string中最后一次出现的位置, 如果没有找到, 则返回NULL.

    14. char *strstr(const char *string, const char *strSearch);
      在字符串string中查找strSearch子串.
      返回子串strSearch在string中首次出现位置的指针. 如果没有找到子串strSearch, 则返回NULL. 如果子串strSearch为空串, 函数返回string值.

    15. char *strdup(const char *strSource);
      函数运行中会自己调用malloc函数为复制strSource字符串分配存储空间, 然后再将strSource复制到分配到的空间中. 注意要及时释放这个分配的空间.
      返回一个指针, 指向为复制字符串分配的空间; 如果分配空间失败, 则返回NULL值.

    16. char *strcat(char *strDestination, const char *strSource);
      将源串strSource添加到目标串strDestination后面, 并在得到的新串后面加上NULL结束符. 源串strSource的字符会覆盖目标串strDestination后面的结束符NULL. 在字符串的复制或添加过程中没有溢出检查, 所以要保证目标串空间足够大. 不能处理源串与目标串重叠的情况.
      函数返回strDestination值.

    17. char *strncat(char *strDestination, const char *strSource, size_t count);
      将源串strSource开始的count个字符添加到目标串strDest后. 源串strSource的字符会覆盖目标串strDestination后面的结束符NULL. 如果count大于源串长度, 则会用源串的长度值替换count值. 得到的新串后面会自动加上NULL结束符. 与strcat函数一样, 本函数不能处理源串与目标串重叠的情况.
      函数返回strDestination值.

    18. char *strcpy(char *strDestination, const char *strSource);
      复制源串strSource到目标串strDestination所指定的位置, 包含NULL结束符. 不能处理源串与目标串重叠的情况.
      函数返回strDestination值.

    19. char *strncpy(char *strDestination, const char *strSource, size_t count);
      将源串strSource开始的count个字符复制到目标串strDestination所指定的位置. 如果count值小于或等于strSource串的长度, 不会自动添加NULL结束符目标串中, 而count大于strSource串的长度时, 则将strSource用NULL结束符填充补齐count个字符, 复制到目标串中. 不能处理源串与目标串重叠的情况.
      函数返回strDestination值.

    20. char *strset(char *string, int c);
      将string串的所有字符设置为字符c, 遇到NULL结束符停止.
      函数返回内容调整后的string指针.

    21. char *strnset(char *string, int c, size_t count);
      将string串开始count个字符设置为字符c, 如果count值大于string串的长度, 将用string的长度替换count值.
      函数返回内容调整后的string指针.

    22. size_t strspn(const char *string, const char *strCharSet);
      查找任何一个不包含在strCharSet串中的字符 (字符串结束符NULL除外) 在string串中首次出现的位置序号.
      返回一个整数值, 指定在string中全部由characters中的字符组成的子串的长度. 如果string以一个不包含在strCharSet中的字符开头, 函数将返回0值.

    23. size_t strcspn(const char *string, const char *strCharSet);
      查找strCharSet串中任何一个字符在string串中首次出现的位置序号, 包含字符串结束符NULL.
      返回一个整数值, 指定在string中全部由非characters中的字符组成的子串的长度. 如果string以一个包含在strCharSet中的字符开头, 函数将返回0值.

    24. char *strspnp(const char *string, const char *strCharSet);
      查找任何一个不包含在strCharSet串中的字符 (字符串结束符NULL除外) 在string串中首次出现的位置指针.
      返回一个指针, 指向非strCharSet中的字符在string中首次出现的位置.

    25. char *strpbrk(const char *string, const char *strCharSet);
      查找strCharSet串中任何一个字符在string串中首次出现的位置, 不包含字符串结束符NULL.
      返回一个指针, 指向strCharSet中任一字符在string中首次出现的位置. 如果两个字符串参数不含相同字符, 则返回NULL值.

    26. int strcmp(const char *string1, const char *string2);
      比较字符串string1和string2大小.
      返回值< 0, 表示string1小于string2;
      返回值为0, 表示string1等于string2;
      返回值> 0, 表示string1大于string2.

    27. int stricmp(const char *string1, const char *string2);
      比较字符串string1和string2大小,和strcmp不同, 比较的是它们的小写字母版本.
      返回值与strcmp相同.

    28. int strcmpi(const char *string1, const char *string2);
      等价于stricmp函数, 只是提供一个向后兼容的版本.

    29. int strncmp(const char *string1, const char *string2, size_t count);
      比较字符串string1和string2大小,只比较前面count个字符. 比较过程中, 任何一个字符串的长度小于count, 则count将被较短的字符串的长度取代. 此时如果两串前面的字符都相等, 则较短的串要小.
      返回值< 0, 表示string1的子串小于string2的子串;
      返回值为0, 表示string1的子串等于string2的子串;
      返回值> 0, 表示string1的子串大于string2的子串.

    30. int strnicmp(const char *string1, const char *string2, size_t count);
      比较字符串string1和string2大小,只比较前面count个字符. 与strncmp不同的是, 比较的是它们的小写字母版本.
      返回值与strncmp相同.

    31. char *strtok(char *strToken, const char *strDelimit);
      在strToken 串中查找下一个标记, strDelimit字符集则指定了在当前查找调用中可能遇到的分界符.
      返回一个指针, 指向在strToken中找到的下一个标记. 如果找不到标记, 就返回NULL值. 每次调用都会修改strToken内容, 用NULL字符替换遇到的每个分界符.

    展开全文
  • [C] 语言字符串函数

    2017-04-16 18:22:00
    一、字符串函数 1、gets() 头文件:#include <stdio.h> 函数原型:char *gets(char *string); 函数说明:从标准输入流(stdin)中读取整行,直至遇到换行符结束,然后丢弃换行符,储存其余字符,并在末尾...

    一、字符串函数

    1、gets()

    头文件:#include <stdio.h>

    函数原型:char *gets(char *string);

    函数说明:从标准输入流(stdin)中读取整行,直至遇到换行符结束,然后丢弃换行符,储存其余字符,并在末尾加上空字符,表示一个字符串;

    函数返回值:若成功则返回指向string的指针,否则返回NULL;

    备注:与puts()函数配套使用;只知道string的开始出,不知道数组中有多少个元素,超出边界,容易造成缓冲区溢出

    2、fgets()

    头文件:include<stdio.h>

    函数原型:char *fgets(char *string, int size, FILE *stream);

    函数说明:从输入流( FILE *stream)中读取整行;如果size设为n,将从输入流中读取n-1个字符,或者遇到换行符结束(包含换行符),存储在string中,并在末尾添加空字符,表示一个字符串;

    函数返回值:读取成功,返回读取到的字符串,即string;失败或读到文件结尾返回NULL。因此,我们不能直接通过fgets()的返回值来判断函数是否是出错而终止的,应该借助feof()函数或者ferror()函数来判断;

    备注:与fputs()配套使用。

    3、puts()

    头文件:#include<stdio.h>

    函数原型:int puts(char *string);

    函数说明:puts()函数用于将一字符串输出到标准输出流(stdout)中,直到遇见结束标志 '\0','\0'不会被输出到stdout,并在最后增加换行符 '\n';

    返回值:输出成功返回非0值,否则返回0;

    4、fputs()

    头文件:#include <stdio.h>

    函数原型:int fputs(char *string, FILE *stream);

    函数说明:fputs()从string的开头向文件写入字符串,直到遇见结束字符 '\0','\0' 不会被写入到文件中,不添加换行符;

    备注:fputs()可以指定输出的文件流,不会输出多余的字符;puts()只能向 stdout 输出字符串,而且会在最后自动增加换行符。

    5、strcat()

    头文件:#include <string.h>

    函数原型:char *strcat(char *dest, const char *src);

    函数说明:strcat() 会将参数 src 字符串复制到参数 dest 所指的字符串尾部;dest 最后的结束字符 NULL 会被覆盖掉,并在连接后的字符串的尾部再增加一个 NULL,空字符是结束标志;

    返回值:返回dest 字符串起始地址;

    备注:dest 与 src 所指的内存空间不能重叠,且 dest 要有足够的空间来容纳要复制的字符串。

    6、strncat()

    头文件:#inclue <string.h>

    函数原型:char * strncat(char *dest, const char *src, size_t n);

    函数说明:strncat()将会从字符串src的开头拷贝n 个字符到dest字符串尾部,dest要有足够的空间来容纳要拷贝的字符串。如果n大于字符串src的长度,那么仅将src全部追加到dest的尾部;strncat()会将dest字符串最后的'\0'覆盖掉,字符追加完成后,再追加'\0';

    返回值:返回字符串dest。

    7、strcmp()

    头文件:#include <string.h>

    函数原型:int strcmp(const char *s1, const char *s2);

    函数说明:strcmp() 用来比较字符串(区分大小写);字符串大小的比较是以ASCII 码表上的顺序来决定,此顺序亦为字符的值。strcmp()首先将s1 第一个字符值减去s2 第一个字符值,若差值为0 则再继续比较下个字符,若差值不为0 则将差值返回。例如字符串"Ac"和"ba"比较则会返回字符"A"(65)和'b'(98)的差值(-33);

    返回值:若参数s1 和s2 字符串相同则返回0。s1 若大于s2 则返回大于0 的值。s1 若小于s2 则返回小于0 的值;

    备注:strcmp() 以二进制的方式进行比较,不会考虑多字节或宽字节字符;如果考虑到本地化的需求,请使用 strcoll()函数。

    8、strncmp()

    头文件:#include <string.h>

    函数原型:int strncmp ( const char * str1, const char * str2, size_t n );

    函数说明:strncmp() 用来比较两个字符串的前n个字符,区分大小写;字符串大小的比较是以ASCII 码表上的顺序来决定,此顺序亦为字符的值。strncmp()首先将s1 第一个字符值减去s2 第一个字符值,若差值为0 则再继续比较下个字符,直到字符结束标志'\0',若差值不为0,则将差值返回。例如字符串"Ac"和"ba"比较则会返回字符"A"(65)和'b'(98)的差值(-33)。

    返回值:若str1与str2的前n个字符相同,则返回0;若s1大于s2,则返回大于0的值;若s1 若小于s2,则返回小于0的值;

    备注:要比较的字符包括字符串结束标志'\0',而且一旦遇到'\0'就结束比较,无论n是多少,不再继续比较后边的字符。

    注意:如果两个字符不同,GCC返回该字符对应的ASCII码的差值,VC返回-1或1。但是让人为难的是,strnicmp()strcmp()stricmp()在GCC和VC下都返回-1或1,而不是ASCII的差值。

    9、strcpy()

    头文件:#include <string.h>

    函数原型: char *strcpy(char *dest, const char *src);

    函数说明:strcpy() 函数用来复制字符串;strcpy() 把src所指的由'\0'结束的字符串(包含空字符)复制到dest 所指的数组中(且可以不必指向数组的开始),返回指向 dest 字符串的起始地址,即只拷贝空字符(包含空字符)之前的所有的字符,忽略其后的所有字符。

    返回值:成功执行后返回目标数组指针 dest;

    备注:src 和 dest 所指的内存区域不能重叠,且 dest 必须有足够的空间放置 src 所包含的字符串(包含结束符NULL);如果参数 dest 所指的内存空间不够大,可能会造成缓冲溢出(buffer Overflow)的错误情况,在编写程序时请特别留意,或者用strncpy()来取代。

    10、strncpy()

    头文件:#include <string.h>

    函数原型:char * strncpy(char *dest, const char *src, size_t n);

    函数说明:strncpy()用来复制字符串的前n个字符;如果src的字符数少于n个,目标字符串就以拷贝的空字符结尾;如果src的字符数有n个或超过n个,就不拷贝空字符;

    返回值:返回字符串dest;

    备注:src 和 dest 所指的内存区域不能重叠,且 dest 必须有足够的空间放置n个字符;还要注意不拷贝空字符的情况。

    11、sprintf()

    头文件:#include <stdio.h>

    函数原型:int sprintf(char *str, char * format [, argument, ...]);

    函数说明:sprintf()函数用于将格式化的数据写入字符串;str为要写入的字符串;format为格式化字符串,与printf()函数相同;argument为变量;sprintf()会根据参数format 字符串来转换并格式化数据,然后将结果复制到参数str 所指的字符串数组,直到出现空字符结束('\0')为止;

    备注:sprintf的作用是将一个格式化的字符串输出到一个目的字符串中,而printf是将一个格式化的字符串输出到屏幕。sprintf的第一个参数应该是目的字符串,如果不指定这个参数,执行过程中出现 "该程序产生非法操作,即将被关闭...."的提示;C语言对数组进行操作时并不检测数组的长度,如果str的长度不够,sprintf()很容易造成缓冲区溢出,带来意想不到的后果,黑客经常利用这个弱点攻击看上去安全的系统。

    12、strchr()

    头文件:#include <string.h>

    函数原型:char * strchr (const char *str, int c);

    函数说明:查找某字符在字符串中首次出现的位置;strchr() 将会找出 str 字符串中第一次出现字符 c 的地址,然后将该地址返回;

    返回值:如果找到指定的字符则返回该字符所在地址,否则返回 NULL。

    备注:字符串 str 的结束标志 '\0', 也会被纳入检索范围,所以 str 的组后一个字符也可以被定位。

    13、strrchr()

    头文件:#include <string.h>

    函数原型:char * strrchr(const char *str, int c);

    函数说明:查找某字符在字符串中最后一次出现的位置;将会找出 str 字符串中最后一次出现字符 c 的地址,然后将该地址返回;

    返回值:如果找到就返回该字符最后一次出现的位置,否则返回 NULL。

    备注:字符串 str 的结束标志'\0', 也会被纳入检索范围,所以 str 的组后一个字符也可以被定位。

    14、strpbrk()

    头文件:#include <string.h>

    函数原型:char *strpbrk( char *s1, char *s2);

    函数说明:检索两个字符串中首个相同字符的位置;strpbrk()从s1的第一个字符向后检索,直到'\0',如果当前字符存在于s2中,那么返回当前字符的地址,并停止检索。

    返回值:如果s1、s2含有相同的字符,那么返回指向s1中第一个相同字符的指针,否则返回NULL。

    备注:strpbrk()不会对结束符'\0'进行检索。

     1 #include<stdio.h>
     2 #include<string.h>
     3 int main(void){
     4     char* s1 = "http://see.xidian.edu.cn/cpp/u/xitong/";
     5     char* s2 = "see";
     6     char* p = strpbrk(s1,s2);
     7     if(p){
     8         printf("The result is: %s\n",p);   
     9     }else{
    10         printf("Sorry!\n");
    11     }
    12     return 0;
    13 }
    14 
    15 结果:
    16 The result is: see.xidian.edu.cn/cpp/u/xitong/

    15、strstr()

    头文件:#include <string.h>

    函数原型: char *strstr( char *str, char * substr );

    函数说明:用来检索子串在字符串中首次出现的位置;

    返回值:返回字符串str中第一次出现子串substr的地址;如果没有检索到子串,则返回NULL。

     1 #include<stdio.h>
     2 #include<string.h>
     3 int main(){
     4     // 也可以改成 char str[] = "http://see.xidian.edu.cn/cpp/u/xitong/";
     5     char *str = "http://see.xidian.edu.cn/cpp/u/xitong/";
     6     char *substr = "see";
     7     char *s = strstr(str, substr);
     8     printf("%s\n", s);
     9     return 0;
    10 }
    11 
    12 结果:
    13 see.xidian.edu.cn/cpp/u/xitong/

    16、strlen()

    头文件:#include <string.h>

    函数原型:unsigned int strlen (char *s);

    函数说明:计算指定的字符串s 的长度,不包括结束字符'\0';

    注意:

    一下字符数组,例如
        char str[100] = "http://see.xidian.edu.cn/cpp/u/biaozhunku/";
    定义了一个大小为100的字符数组,但是仅有开始的11个字符被初始化了,剩下的都是0,所以 sizeof(str) 等于100,strlen(str) 等于11。

    如果字符的个数等于字符数组的大小,那么strlen()的返回值就无法确定了,例如
        char str[6] = "abcxyz";
    strlen(str)的返回值将是不确定的。因为str的结尾不是0,strlen()会继续向后检索,直到遇到'\0',而这些区域的内容是不确定的。

    strlen() 函数计算的是字符串的实际长度,遇到第一个'\0'结束。如果你只定义没有给它赋初值,这个结果是不定的,它会从首地址一直找下去,直到遇到'\0'停止。而sizeof返回的是变量声明后所占的内存数,不是实际长度,此外sizeof不是函数,仅仅是一个操作符,strlen()是函数。

    17、memchr()

    头文件:#include <string.h>

    函数原型:void * memchr(const void *s, char c, size_t n);

    函数说明:memchr()从头开始搜寻s 所指的内存内容前n 个字节,直到发现第一个值为c 的字节,则返回指向该字节的指针。

    返回值:如果找到指定的字节则返回该字节的指针,否则返回NULL。

    18、memcmp()

    头文件:#include <string.h>

    定义函数:int memcmp (const void *s1, const void *s2, size_t n);

    函数说明:memcmp()用来比较s1 和s2 所指的内存区间前n 个字符,适用于任何数据类型。

    字符串大小的比较是以ASCII 码表上的顺序来决定,次顺序亦为字符的值。memcmp()首先将s1 第一个字符值减去s2 第一个字符的值,若差为0 则再继续比较下个字符,若差值不为0 则将差值返回。例如,字符串"Ac"和"ba"比较则会返回字符'A'(65)和'b'(98)的差值(-33)。

    返回值:若参数s1 和s2 所指的内存内容都完全相同则返回0 值。s1 若大于s2 则返回大于0 的值。s1 若小于s2 则返回小于0 的值。

     1 #include <string.h>
     2 main(){
     3     char *a = "aBcDeF";
     4     char *b = "AbCdEf";
     5     char *c = "aacdef";
     6     char *d = "aBcDeF";
     7     printf("memcmp(a, b):%d\n", memcmp((void*)a, (void*)b, 6));
     8     printf("memcmp(a, c):%d\n", memcmp((void*)a, (void*)c, 6));
     9     printf("memcmp(a, d):%d\n", memcmp((void*)a, (void*)d, 6));
    10 }

    19、memcpy()

    头文件:#include <string.h>

    memcpy() 用来复制内存,其原型为:
        void * memcpy ( void * dest, const void * src, size_t num );

    memcpy() 会复制 src 所指的内存内容的前 num 个字节到 dest 所指的内存地址上。

    memcpy() 并不关心被复制的数据类型,只是逐字节地进行复制,这给函数的使用带来了很大的灵活性,可以面向任何数据类型进行复制。

    需要注意的是:

    • dest 指针要分配足够的空间,也即大于等于 num 字节的空间。如果没有分配空间,会出现断错误。
    • dest 和 src 所指的内存空间不能重叠(如果发生了重叠,使用 memmove() 会更加安全)。


    与 strcpy() 不同的是,memcpy() 会完整的复制 num 个字节,不会因为遇到“\0”而结束

    【返回值】返回指向 dest 的指针。注意返回的指针类型是 void,使用时一般要进行强制类型转换。

    20、memmove()

    头文件:#include <string.h>

    memmove() 用来复制内存内容,其原型为:
        void * memmove(void *dest, const void *src, size_t num);

    memmove() 与 memcpy() 类似都是用来复制 src 所指的内存内容前 num 个字节到 dest 所指的地址上。不同的是,memmove() 更为灵活,当src 和 dest 所指的内存区域重叠时,memmove() 仍然可以正确的处理,不过执行效率上会比使用 memcpy() 略慢些。

    【返回值】返回指向 dest 的指针。注意返回的指针类型是 void,使用时一般要进行强制类型转换。

    21、memset()

    头文件:#include <string.h>

    memset() 函数用来将指定内存的前n个字节设置为特定的值,其原型为:
        void * memset( void * ptr, int value, size_t num );

    参数说明:

    • ptr 为要操作的内存的指针。
    • value 为要设置的值。你既可以向 value 传递 int 类型的值,也可以传递 char 类型的值,int 和 char 可以根据 ASCII 码相互转换
    • num 为 ptr 的前 num 个字节,size_t 就是unsigned int。


    【函数说明】memset() 会将 ptr 所指的内存区域的前 num 个字节的值都设置为 value,然后返回指向 ptr 的指针。

    memset() 可以将一段内存空间全部设置为特定的值,所以经常用来初始化字符数组。例如:

    1 char str[20];
    2 memset(str, '\0', sizeof(str)-1);

    【返回值】返回指向 ptr 的指针。

    注意:参数 value 虽声明为 int,但必须是 unsigned char,所以范围在0 到255 之间。

    22、strspn()

    头文件:#include <string.h>

    strspn() 函数用来计算字符串 str 中连续有几个字符都属于字符串 accept,其原型为:
    size_t strspn(const char *str, const char * accept);

    【函数说明】strspn() 从参数 str 字符串的开头计算连续的字符,而这些字符都完全是 accept 所指字符串中的字符。简单的说,若 strspn() 返回的数值为n,则代表字符串 str 开头连续有 n 个字符都是属于字符串 accept 内的字符。

    【返回值】返回字符串 str 开头连续包含字符串 accept 内的字符数目。所以,如果 str 所包含的字符都属于 accept,那么返回 str 的长度;如果 str 的第一个字符不属于 accept,那么返回 0。

    注意:检索的字符是区分大小写的。

    提示:函数 strcspn() 的含义与 strspn() 相反,可以对比学习。

    23、strcspn()

    头文件:#inclued<string.h>

    strcspn() 用来计算字符串 str 中连续有几个字符都不属于字符串 accept,其原型为:
        int strcspn(char *str, char *accept);

    【参数说明】str、accept为要进行查找的两个字符串。

    strcspn() 从字符串 str 的开头计算连续的字符,而这些字符都完全不在字符串 accept 中。简单地说,若 strcspn() 返回的数值为 n,则代表字符串 str 开头连续有 n 个字符都不含字符串 accept 中的字符。

    【返回值】返回字符串 str 开头连续不含字符串 accept 内的字符数目。

    注意:如果 str 中的字符都没有在 accept 中出现,那么将返回 str 的长度;检索的字符是区分大小写的。

    提示:函数 strspn() 的含义与 strcspn() 相反,可以对比学习。

    24、strtok()

    头文件:#include <string.h>

    定义函数:char * strtok(char *s, const char *delim);

    函数说明:strtok()用来将字符串分割成一个个片段。参数s 指向欲分割的字符串,参数delim 则为分割字符串,当strtok()在参数s 的字符串中发现到参数delim 的分割字符时则会将该字符改为\0 字符。在第一次调用时,strtok()必需给予参数s 字符串,往后的调用则将参数s 设置成NULL。每次调用成功则返回下一个分割后的字符串指针。

    返回值:返回下一个分割后的字符串指针,如果已无从分割则返回NULL。

     1 #include <string.h>
     2 main(){
     3     char s[] = "ab-cd : ef;gh :i-jkl;mnop;qrs-tu: vwx-y;z";
     4     char *delim = "-: ";
     5     char *p;
     6     printf("%s ", strtok(s, delim));
     7     while((p = strtok(NULL, delim)))
     8         printf("%s ", p);
     9         printf("\n");
    10 }
    11 
    12 执行结果:
    13 ab cd ef;gh i jkl;mnop;qrs tu vwx y;z     //-与:字符已经被\0 字符取代

     

    转载于:https://www.cnblogs.com/xiaofeiIDO/p/6719466.html

    展开全文
  • 导读C 语言中整数与字符串的相互转换,有广泛应用的拓展函数(非标准库),也可以自己尝试简单的实现。一、简述C 语言中整数与字符串的相互转换,有广泛应用的拓展函数(非标准库),也可以自己尝试简单的实现。二、整数...

    导读

    C 语言中整数与字符串的相互转换,有广泛应用的拓展函数(非标准库),也可以自己尝试简单的实现。

    一、简述

    C 语言中整数与字符串的相互转换,有广泛应用的拓展函数(非标准库),也可以自己尝试简单的实现。

    二、整数转字符串

    1、拓展函数 itoa

    itoa (表示 integer to alphanumeric)是把整型数转换成字符串的一个函数。

    windows 环境下,在 头文件中有:

    char* itoa(int value,char*string,int radix);//value: 要转换的整数,string: 转换后的字符串,radix: 转换进制数,如2,8,10,16 进制等。

    函数源码:

    char* itoa(int num,char* str,int radix)

    {

    char index[]="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";//索引表

    unsigned unum;//存放要转换的整数的绝对值,转换的整数可能是负数

    int i=0,j,k;//i用来指示设置字符串相应位,转换之后i其实就是字符串的长度;转换后顺序是逆序的,有正负的情况,k用来指示调整顺序的开始位置;j用来指示调整顺序时的交换。

    //获取要转换的整数的绝对值

    if(radix==10&&num<0)//要转换成十进制数并且是负数

    {

    unum=(unsigned)-num;//将num的绝对值赋给unum

    str[i++]='-';//在字符串最前面设置为'-'号,并且索引加1

    }

    else unum=(unsigned)num;//若是num为正,直接赋值给unum

    //转换部分,注意转换后是逆序的

    do

    {

    str[i++]=index[unum%(unsigned)radix];//取unum的最后一位,并设置为str对应位,指示索引加1

    unum/=radix;//unum去掉最后一位

    }while(unum);//直至unum为0退出循环

    str[i]='\0';//在字符串最后添加'\0'字符,c语言字符串以'\0'结束。

    //将顺序调整过来

    if(str[0]=='-') k=1;//如果是负数,符号不用调整,从符号后面开始调整

    else k=0;//不是负数,全部都要调整

    char temp;//临时变量,交换两个值时用到

    for(j=k;j<=(i-1)/2;j++)//头尾一一对称交换,i其实就是字符串的长度,索引最大值比长度少1

    {

    temp=str[j];//头部赋值给临时变量

    str[j]=str[i-1+k-j];//尾部赋值给头部

    str[i-1+k-j]=temp;//将临时变量的值(其实就是之前的头部值)赋给尾部

    }

    return str;//返回转换后的字符串

    }

    示例程序:

    实例

    #include #include int main()

    {

    int number1 = 123456;

    int number2 = -123456;

    char string[16] = {0};

    itoa(number1,string,10);

    printf("数字:%d 转换后的字符串为:%s\n",number1,string);

    itoa(number2,string,10);

    printf("数字:%d 转换后的字符串为:%s\n",number2,string);

    return 0;

    }

    效果截图:

    6369f5954160d6efc20486739ed213db.png

    2、自己简单实现

    实现代码:

    实例

    #includechar*Int2String(intnum,char*str);//函数声明intmain(){intnumber1=123456;intnumber2= -123456;charstring[16]={0};Int2String(number1,string);printf("数字:%d 转换后的字符串为:%s\n",number1,string);Int2String(number2,string);printf("数字:%d 转换后的字符串为:%s\n",number2,string);return0;}char*Int2String(intnum,char*str)//10进制{inti=0;//指示填充strif(num<0)//如果num为负数,将num变正{num= -num;str[i++]= '-';}//转换do{str[i++]=num%10+48;//取num最低位 字符0~9的ASCII码是48~57;简单来说数字0+48=48,ASCII码对应字符'0'num/=10;//去掉最低位}while(num);//num不为0继续循环str[i]= '\0';//确定开始调整的位置intj=0;if(str[0]=='-')//如果有负号,负号不用调整{j=1;//从第二位开始调整++i;//由于有负号,所以交换的对称轴也要后移1位}//对称交换for(;j

    效果截图:

    fce43121d0919abaef3e20fba3e6e378.png

    三、字符串转整数

    1、拓展函数

    atoi (表示 alphanumeric to integer)是把字符串转换成整型数的一个函数。

    windows 环境下,在 头文件中。

    int atoi(const char *nptr);//字符串转整数函数,nptr: 要转换的字符串

    函数源码

    int atoi(const char *nptr)

    {

    return (int)atol(nptr);

    }

    long atol(const char *nptr)

    {

    int c; /* 当前要转换的字符(一个一个字符转换成数字) */

    long total; /* 当前转换结果 */

    int sign; /* 标志转换结果是否带负号*/

    /*跳过空格,空格不进行转换*/

    while ( isspace((int)(unsigned char)*nptr) )

    ++nptr;

    c = (int)(unsigned char)*nptr++;//获取一个字符准备转换

    sign = c; /*保存符号标示*/

    if (c == '-' || c == '+')

    c = (int)(unsigned char)*nptr++; /*跳过'+'、'-'号,不进行转换*/

    total = 0;//设置转换结果为0

    while (isdigit(c)) {//如果字符是数字

    total = 10 * total + (c - '0'); /* 根据ASCII码将字符转换为对应的数字,并且乘10累积到结果 */

    c = (int)(unsigned char)*nptr++; /* 取下一个字符 */

    }

    //根据符号指示返回是否带负号的结果

    if (sign == '-')

    return -total;

    else

    return total;

    }

    示例程序:

    实例

    #include#includeint main()

    {

    printf("字符串\"123456\"转换为数字:%d\n",atoi("123456"));

    printf("字符串\"-123456\"转换为数字:%d\n",atoi("-123456"));

    return 0;

    }

    5880a5acae028cb2dc164868702c012e.png

    2、自己简单实现

    实现源码:

    实例

    #includeint String2Int(char *str);//函数声明

    int main()

    {

    printf("字符串\"123456\"转换为数字:%d\n",String2Int("123456"));

    printf("字符串\"-123456\"转换为数字:%d\n",String2Int("-123456"));

    return 0;

    }

    int String2Int(char *str)//字符串转数字

    {

    char flag = '+';//指示结果是否带符号

    long res = 0;

    if(*str=='-')//字符串带负号

    {

    ++str;//指向下一个字符

    flag = '-';//将标志设为负号

    }

    //逐个字符转换,并累加到结果res

    while(*str>=48 && *str<57)//如果是数字才进行转换,数字0~9的ASCII码:48~57

    {

    res = 10*res+ *str++-48;//字符'0'的ASCII码为48,48-48=0刚好转化为数字0

    }

    if(flag == '-')//处理是负数的情况

    {

    res = -res;

    }

    return (int)res;

    }

    截图:

    1137adca8e77324f2f39c1f912e7dcd8.png

    四、利用 sprintf() 函数和 sscanf() 函数

    整数转字符串

    测试代码:

    实例

    #include char* Int2String(int num,char *str);//函数声明

    int main()

    {

    int number1 = 123456;

    int number2 = -123456;

    char string[16] = {0};

    Int2String(number1,string);

    printf("数字:%d 转换后的字符串为:%s\n",number1,string);

    Int2String(number2,string);

    printf("数字:%d 转换后的字符串为:%s\n",number2,string);

    return 0;

    }

    char* Int2String(int num,char *str)

    {

    sprintf(str, "%d", num);

    return str;

    }

    运行结果:

    72d9831aca14b3a5d640f206586a0b28.png

    字符串转整数

    测试代码:

    实例

    #includeint String2Int(char *str);//函数声明

    int main()

    {

    printf("字符串\"123456\"转换为数字:%d\n",String2Int("123456"));

    printf("字符串\"-123456\"转换为数字:%d\n",String2Int("-123456"));

    return 0;

    }

    int String2Int(char *str)//字符串转数字

    {

    char flag = '+';//指示结果是否带符号

    long res = 0;

    if(*str=='-')//字符串带负号

    {

    ++str;//指向下一个字符

    flag = '-';//将标志设为负号

    }

    sscanf(str, "%ld", &res);

    if(flag == '-')

    {

    res = -res;

    }

    return (int)res;

    }

    运行结果:

    a994e8e09eb4e89bf0e553d134400e26.png

    五、附ASCII码表(部分)

    bb8aaee9943dfe4c468f8571bd105644.png

    展开全文
  • ANSI C标准要求在使用字符函数时要包含头文件“ctype.h”,在使用字符串函数时要包含头文件“string.h” 函数名 函数原型 功能 返回           值 包含文件 isalnum   检查ch是否是英文字母...
  • 介绍了c语言当中字符串处理的相关函数
  • 这些都是以各种方式...字符串函数大全:addcslashes — 以 C 语言风格使用反斜线转义字符串中的字符addslashes — 使用反斜线引用字符串bin2hex — 将二进制数据转换成十六进制表示chop — rtrim 的别名chr — 返...
  • 字符串是一系列被视为一个处理单元的字符,在 C 语言中,字符串是以空字符位结尾的一系列字符,它存储在字符数组中。 C 预处理器 C 预处理器为预处理指令(以 # 符号开始)查找源代码程序,在开始编译程序之前处理...
  • strtok() 函数实现字符串分割 实例代码: #include #include int main(int argc, char ** argv) { char test[] = "hello world c!!"; char ch[] = " "; char * ptr = strtok(test, ch); // 实现字符...
  • php字符串函数:addcslashes — 以 C 语言风格使用反斜线转义字符串中的字符addslashes — 使用反斜线引用字符串bin2hex — 函数把包含数据的二进制字符串转换为十六进制值chop — rtrim 的别名chr — 返回指定的...
  • php编程语言中有哪些字符串函数发布时间:2020-11-11 11:09:37来源:亿速云阅读:102作者:小新小编给大家分享一下php编程语言中有哪些...php字符串函数:addcslashes — 以 C 语言风格使用反斜线转义字符串中的字...
  • php字符串函数:addcslashes — 以 C 语言风格使用反斜线转义字符串中的字符addslashes — 使用反斜线引用字符串bin2hex — 函数把包含数据的二进制字符串转换为十六进制值chop — rtrim 的别名chr — 返回指定的...
  • 字符串数组 打印到终端(遇到\0 字符时结束) chara[]={"Iloveyou"};puts(a);//OUTPUT:Iloveyou 函数2: gets(char c[]); 从终端读入字符数组,并保存到c字符数组中。 chara[]={"testtesttestt...
  • 字符串函数 参见 更多强大的字符串处理函数,参见 POSIX 正则表达式函数和 Perl 兼容正则表达式函数。 Table of Contents ■addcslashes — 以 C 语言风格使用反斜线转义字符串中的字符 ■addslashes — 使用反斜线...
  • int my_strlen(const char *p) { int i = 0; while(*p){ p++; i++; } return i; }int my_strcpy(char *desc, const char * str) { if((desc == NULL)||(str == NULL)){
  • C 语言字符串处理函数实现合集

    千次阅读 2015-06-17 20:54:07
    功能描述:常用C库函数的C实现  程序分析:  维护记录:  [cpp]   view plain copy =========================================================================*...
  • R语言字符串处理函数(来自base包) 函数 说 明 nchar(x) 计算x中的字符数量 substr() 提取或替换一个字符向量中的子串 grep() 在字符串中匹配某种模式 sub() 在字符串中搜索模式,并以另一个文本...
  • } } strchr() 查找字符串s中首次出现字符c的位置 char *My_Strchr(const char *src,int c) { while(*src != c) { if(*src == '\0') { return NULL; } src++; } return (char*)src; } strrchr() char ...
  • 这是C语言字符串操作函数文档说明例子链接http://www.ggv.com.cn/forum/clib/string/bcopy.html 
  • C 字符串函数

    2009-12-06 21:26:00
    C语言并不是一种很方便...为了方便用户,C语言标准库向用户提供了一些字符串函数,如字符串拷贝、构造、清空等函数,在一定程度上方便了用户的使用。但是,我无意中发现,这些函数还是有些隐患的。事情很简单,我注意到
  • C 语言是没有字符串类型的。那它是如何存放和表示字符串的呢?两种方式——字符串常量以及字符类型的数组。 字符串常量:“FishC”,“小甲鱼”,“鱼C工作室” 字符数组: 可以先定义指定长度的字符数组,然后再给...
  • C 语言中,字符串实际上是使用 null 字符 '\0' 终止的一维字符数组。因此,一个以 null 结尾的字符串,包含了组成字符串的字符。 strcpy(s1, s2); 复制字符串 s2 到字符串 s1。 strcat(s1, s2); 连接字符串...
  • 字符串函数

    2019-02-14 17:31:05
    addcslashes — 以 C 语言风格使用反斜线转义字符串中的字符 addslashes — 使用反斜线引用字符串 bin2hex — 函数把包含数据的二进制字符串转换为十六进制值 chop — rtrim 的别名 chr — 返回指定的字符 chunk_...
  • php字符串函数:addcslashes — 以 C 语言风格使用反斜线转义字符串中的字符addslashes— 使用反斜线引用字符串bin2hex — 函数把包含数据的二进制字符串转换为十六进制值chop — rtrim 的别名chr — 返回指定的字符...
  • 字符串函数自定义

    2016-07-31 17:08:01
    字符串函数(String processing function)也成字符串处理函数,指的是编程语言中用来进行字符串处理的函数,如C,pascal,Visual以及LotusScript中进行字符串拷贝,计算长度,字符查找等的函数。
  • 每次找到一个分隔符后,一个空(NULL)就被放到分隔符处,函数用这种方法来连续查找该字符串。 示例: #include #include int main() { char *p; char str[100]="This is a test ,and you can use it"; p =...
  • 常见字符串函数汇总

    2019-03-31 17:57:10
    字符串函数(String processing function)也叫字符串处理函数,指的是编程语言中用来进行字符串处理的函数,如C,pascal,Visual以及LotusScript中进行字符串拷贝,计算长度,字符查找等的函数。 常用字符串函数 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,761
精华内容 1,504
关键字:

c语言字符串函数

c语言 订阅