精华内容
下载资源
问答
  • c语言字符串复制函数
    2021-05-19 08:20:23

    C语言字符串操作函数和常用的实现

    C语言字符串操作有很多,字符中的函数和常用的实现有哪些呢?下面是小编特别为需要实现编程学习的朋友收集整理的,欢迎大家阅读!更多相关信息请关注相关栏目!

    面试官很喜欢让求职者写一些常用库函数的实现,有很多是和字符串相关的,有一些是关于内存拷贝的。一般,常会让写的函数有以下几个:

    strcpy , strncpy, memcpy。

    memset一般不会让去写,但这个函数也很有特点,有很多容易用错的地方。一并总结吧。字符串操作函数 atof()将字符串转换成浮点数atoi()将字符串转换成整数atol()将字符串转换成长整型数gcvt()将浮点型数转换为字符串(四舍五入)strtod()将字符串转换成浮点数strtol()将字符串转换成长整型数strtoul()将字符串转换成无符号长整型数toascii()将整数转换成合法的ASCII码字符tolower()将大写字母转换为小写字母toupper()将小写字母转换为大写字母index()查找字符串并返回首次出现的位置rindex()查找字符串并返回最后一次出现的位置strcasecmp()判断字符串是否相等(忽略大小写)strcat()连接字符串strcmp()根据ASCII码比较字符串strcoll()根据环境变量LC_COLLATE来比较字符串strcpy()复制字符串strcspn()查找字符串并返回首次出现的位置strchr()查找字符串并返回首次出现该字符的地址strdup()复制字符串strlen()返回字符串长度strncasecmp()比较字符串的前n个字符strncat()拼接字符串(取前n个字符)strncpy()复制字符串(取前n个字符)strpbrk()定位字符串中第一个出现的.指定字符strrchr()定位字符串中最后出现的指定字符strspn()返回从字符串开头连续包含特定字符的字符数目strstr()返回指定字符串第一次出现的地址strtok()字符串分割

    1. strcpy

    strcpy函数的原型是:

    char * strcpy(char* dest, const char* src)

    strcpy的实现经常要注意的细节是:

    (1)判断地址是否为空,个人感觉可以使用断言

    (2)参数只有两个地址,没有拷贝的长度。拷贝到\0‘时就会终止,要保证最终dest末尾是\0。

    (3)要保证目标字串的长度足够,能够容纳原串的长度。

    (4)因为拷贝是dest会移动,而最终要返回的是拷贝后字符串的起始地址,因此要先保存dest的地址,便于最终返回。

    在实现这一点时,有两种方法。 char* temp=dest; 拷贝时移动dest返回temp,或者拷贝时移动temp返回dest,不知道哪个是对的。感觉两个都是没有问题的

    其中一种实现方式:

    [cpp] view plaincopychar* mystrcpy(char* dest,const char* src)

    {

    assert(dest!=NULL && src!=NULL);

    char* temp=dest;

    while((*temp++ = *src++ )!=\0)

    { }

    return dest;

    }

    2. strncpy

    strncpy的功能和strcpy相似,只是它复制时多了一个终止条件。即是未遇到原串的\0’,如果已经复制了n个字符(n为提供的参数长度),复制同样会终止。

    strcpy的实现要注意的细节也基本适用于strncpy的实现。

    实现方式:

    [cpp] view plaincopychar* mystrncpy(char* dest, const char* src, int len)

    {

    assert(dest!=NULL && src!=NULL);

    char* temp=dest;

    int i=0;

    while(i++ < len && (*temp++ = *src++)!=\0)

    { }

    if(*(--temp)!=\0)

    *temp=\0;

    return dest;

    }

    [cpp] view plaincopy注意:刚开始我写strncpy的实现时,把while(i++ < len && (*temp++ = *src++)!=\0)写成了while( (*temp++ = *src++)!=\0 && i++ < len); 导致最后多复制了一个字符,明白为什么吧。。

    3. memcpy

    memcpy和strncpy有些类似,但也有本质的不同。

    (1)strncpy只能复制字符串,但memcpy对类型没有要求。

    (2)strncpy有两个终止条件,memcpy只有一个终止条件,那就是复制n个字节。(n是memcpy的第三个参数)

    (3)要特别注意目的地址和源地址重合的问题,拷贝前要加以判断。

    (4)实现这个函数时一般要把原来的指针类型转换成char*,这样每次移动都是一个字节。

    实现方式:(考虑了两个地址空间是否会有重叠)

    更多相关内容
  • strcpy,即string copy(字符串复制)的缩写。 原型声明:char *strcpy(char *dest, const char *src); 头文件:#include <string.h> 和 #include <stdio.h> 功能:把从src地址开始且含有NULL结束符的...

    strcpy,即string copy(字符串复制)的缩写。
    原型声明:char *strcpy(char *dest, const char *src);
    头文件:#include <string.h>#include <stdio.h>
    功能:把从src地址开始且含有NULL结束符的字符串复制到以dest开始的地址空间。
    说明:src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。
    返回指向dest的指针(返回类型char*)。

    不使用C/C++标准库函数,进行字符串复制函数的编写:

    #include <stdio.h>
    #include <malloc.h>
    #include <assert.h>
    
    void stringcpy(char* to, const char* from) {
    	assert(to != NULL && from != NULL);
    	while (*from != '\0') {
    		*to++ = *from++;
    	}
    	*to = '\0';
    }
    
    int main(void) {
    	char* t = (char*)malloc(15);
    	char* f = (char*)malloc(15);
    	stringcpy(f, "abcdefg");
    	stringcpy(t, f);
    	printf("%s\n", t);
    	printf("%c\n", t[0]);
    	free(t);
    	free(f);
    	getchar();
    	return 0;
    }
    

    运行结果:
    在这里插入图片描述
    详解:
    ① assert宏的原型定义在<assert.h>中,其作用是如果它的条件返回错误,则终止程序执行。

    *to++ = *from++先赋值再各自自增。
    *p++先执行++再执行*,分三步(*++都是同级运算符,右结合)
    (1)先执行p++,因为是后置,先用p
    (2)再执行 *p, 取p所指的内容;
    (3)最后再让p++,让p的地址加一个单位。
    注意:++*p(*p)++都是取p所指对象的值加1。

    *to = '\0'补上结束符,否则会乱码,如图。
    在这里插入图片描述
    char* t = (char*)malloc(15)使用 malloc 向堆动态申请内存;由于 malloc 返回类型为(void*),故用(char*)转换类型;char 为字符型变量,占1字节,此处申请了15字节的内存空间。
    注意:若已不再使用,需要用 free 手动释放由 malloc 申请的内存,防止内存泄漏。

    sizeof(t)的结果为4,sizeof() 是一种内存容量度量函数,功能是返回一个变量或者类型的大小(以字节为单位),对于32位编译器,char*占4字节。

    strlen(t)的结果为7,strlen() 截取'\0'之前的字符串长度,其头文件为<string.h>

    getchar()类似于C++中的system("pause"),用于生成运行结果后暂停,方便查看结果,否则运行窗口会一闪而过,输入回车后即可关闭窗口。

    参考自《程序员面试宝典(第5版)》

    展开全文
  • C语言字符串操作函数汇总

    千次阅读 2021-10-20 23:31:23
    功能:将字符串str2复制字符串str1中,并覆盖str1原始字符串,可以用来为字符串变量赋值。 返回:str1 注意: (1). 字符串str2会覆盖str1中的全部字符; (2). 字符串str2的长度不能超过str1; (3). 拷贝原理...

    1. strcpy函数

    语法:strcpy(str1,str2)

    功能:将字符串str2复制到字符串str1中,并覆盖str1原始字符串,可以用来为字符串变量赋值。

    返回:str1

    注意:

    1. 字符串str2会覆盖str1中的全部字符;

    2. 字符串str2的长度不能超过str1;

    3. 拷贝原理:从首元素开始,遇到\0结束;

    int main()
    {
        char *str1 = "hello world";
        char *str2;
        // 把str1的内容拷贝到str2,参数为字符数组指针
        strcpy(str2, str1);
        printf("str2 = %s\n", str2);
        // str2 = hello world
    
        char str3[15] = "hello\0 world";
        char str4[15];
        // str4的内容拷贝到str3,遇到\0结束
        strcpy(str4, str3);
        printf("str4 = %s\n", str4);
        // str4 = hello
    
        return 0;
    }
    

    2. strncpy函数

    语法:strncpy(str1,str2,n)

    功能:将字符串str2中的前n个字符复制到字符串str1的前n个字符中。

    返回:str1

    注意:

    1. 不会清除str1中全部字符串,只会改变前n个字符串;

    2. n不能大于字符串str1、str2的长度;

    3. 但是如果使用strncpy_s便会清除str1中的全部字符串;

    int main()
    {
        char str1[] = "day day up";
        char str2[] = "you are";
        strncpy(str1, str2, strlen(str2));
        printf("%s\n", str1); 
        // you are up
        return 0;
    }
    

    3. strcat函数

    语法:strcat(str1,str2)

    功能:将字符串str2添加到字符串str1的尾部,也就是拼接两个字符串。

    返回:str1

    int main()
    {
        char str1[] = "hello";
        char str2[] = "world";
        strcat(str1, str2); 
    
        printf("%s\n", str1);
        // hello world
        return 0;
    }
    

    4. strncat函数

    语法:strncat(str1,str2,n)

    功能:将字符串str2的前n个字符添加到字符串str1的尾部。

    返回:str1

    注意:拼接之后的长度不能超过字符串数组str1的长度。

    int main()
    {
        char str1[] = "hello ";
        char str2[] = "world";
        strncat(str1, str2, 2); 
        printf("%s\n", str1);
        // hello wo
        return 0;
    }
    

    5. strlen函数

    语法:strlen(str1)

    功能:计算字符串str1的长度。

    返回:int值

    注意:字符串的长度不包括字符'\0'。

    int main()
    {
        char *str1 = "hello world";
        char *str2 = "hello,\0 kite";
        int l1 = strlen(str1);
        int l2 = strlen(str2);
        printf("l1 = %d\n", l1); 
        // 11
        printf("l2 = %d\n", l2); 
        // 6
        return 0;
    }
    

    6. strcmp函数

    1. 语法:strcmp(str1,str2);

    功能:比较两个字符串。

    (1). 如果两个字符串相等,则返回0;

    (2). 若str1大于str2,返回一个正数,这个正数不一定是1;

    (3). 若str1小于str2,返回一个负数,这个数不一定是-1;

    2. 语法:strncmp(str1,str2,n);

    功能:比较两个字符串的前n个字符。

    3. 语法:stricmp(str1,str2);

    在Windows中使用stricmp,在Linux中使用strcasecmp。

    功能:忽略两个字符串中的大小写比较字符串,也就是对大小写不敏感。

    注意:如果在VS2017中直接使用stricmp会提示如下错误。

     处理办法可用_stricmp代替。

    返回:0或一个正数或一个负数。

    int main()
    {
        char str1[] = "Wearecsdn!";
        char str2[] = "Wearecsdn!";
        char str3[] = "Wearea!";
        char str4[] = "Wearef!";
        char str5[] = "Weare";
        char str6[] = "weAreCsdn!";
     
        int cmp1 = strcmp(str1, str2);        //cmp1=0
        int cmp2 = strcmp(str1, str3);        //cmp2=1
        int cmp3 = strcmp(str1, str4);        //cmp3=-1
        int cmp4 = strcmp(str1, str5);        //cmp4=1
     
        int cmp5 = strncmp(str1, str2, 5);    //cmp5=0
        int cmp6 = strncmp(str1, str3, 5);    //cmp6=0
        int cmp7 = strncmp(str1, str4, 5);    //cmp7=0
        int cmp8 = strncmp(str1, str5, 5);    //cmp8=0
     
        int cmp9 = _stricmp(str1, str6);      //cmp9=0
    
        return 0;
    }

    7. strchr函数

    1. 语法:strchr(str,c);

    功能:从字符串的首地址开始查找,在str字符串中查找首次出现字符c的位置。

    2. 语法:strrchr(str,c);

    功能:在字符串str中从后向前开始查找字符c首次出现的位置。

    3. 语法:strstr(str1,str2);

    功能:在字符串str1中查找字符串str2的位置,若找到,则返回str2第一个字符在str1中的位置的指针,若没找到,返回NULL。

    返回:字符c的位置的指针,若没有查找到字符c,则返回空指针NULL。

    int main()
    {
        // strchr查询字符 
        char *str = "no one can help you";
        // 在字符串中查询字符 h ,如果存在返回h的地址
        // 如果不存在返回NULL
        char *s = strchr(str, 'h');
        if(s){
            printf("存在字符:%c\n", *s);
        } else {
            printf("不存在字符\n");
        }
    
        // strstr查询字符串函数
        char *st = strstr(str, "help");
        // 在字符串中查询字符 help ,如果存在返回help的首地址
        // 如果不存在返回NULL
        if(st){
            printf("存在字符串:%p\n", *st); 
        } else {
            printf("不在在字符串\n");
        }
        return 0;
    }
    

    8. strpbrk函数

    语法:strpbrk(str1,str2);

    功能:依次检验字符串 str1 中的字符,当被检验字符在字符串 str2 中也包含时,则停止检验,并返回该字符位置。

    返回:第一个两个字符串中都包含的字符在str1中的位置的指针。

    int main()
    {
        char str1[] = "We12are34csdn!";
        char str2[] = "32";
     
        char* ret1;
        ret1 = strpbrk(str1, str2);   
     
        int r1 = ret1 - str1;        
     
        printf("%c\n", *ret1); 
        // *ret1 = 2
        printf("%d\n", r1);   
        // r1 = 3
        
        return 0;
    
    }
    

    9. 字符串转数字atoi、atof、atol函数

    1. 语法:atoi(str);

    功能:字符串转换到int整型。

    2. 语法:atof(str) ;

    功能:字符串转换到double浮点数。

    3. 语法:atol(str) ;

    功能:字符串转换到long整形。

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

    千次阅读 2022-03-13 18:58:49
    C语言提供了许多与字符串相关函数,可以在头文件<string.h>中查看函数声明,本章将会自行编写相关字符串函数 一、字符串长度函数 strlen 功能:字符串以 ‘\0’ 作为结束标志,strlen函数返回的是在字符串中 ...


    前言:字符串是一种重要的数据类型,但是 C语言没有显式的字符串数据类型,字符串通过 字符串常量字符数组方式储存。C语言提供了许多与字符串相关函数,可以在头文件 <string.h>中查看函数声明,本章将会 自行编写相关字符串函数

    一、字符串长度函数 strlen

    功能:字符串以 ‘\0’ 作为结束标志,strlen函数返回的是在字符串中 ‘\0’ 前面出现的字符个数(不包
    含 ‘\0’ )
    库函数strlen函数声明:
    size_t strlen(char const *string);
    返回值 :无符号整形,返回字符串长度
    string:字符串起始位置指针

    模拟实现

    size_t my_strlen(const char* string) 
    {
    	assert(string); //检查是否为空指针
    	size_t len = 0;
    	while (*string++ != '\0') //首先将string解引用看是否等于'\0',并将string指向后面一个字符地址
    	{
    		len++; //字符串长度+1
    	}
    	return len;
    }
    

    警告:
    由于strlen返回类型是size_t类型即一个无符号整数类型,无符号整数绝不可能为负。在表达式中使用无符号整数可能造成不可预料后果

    例1

    #include <stdio.h>
    #include <assert.h>
    
    size_t my_strlen(const char* string)
    {
    	assert(string); //检查是否为空指针
    	size_t len = 0;
    	while (*string++ != '\0')
    	{
    		len++;
    	}
    	return len;
    }
    
    int main()
    {
    	char* c1 = "hello";
    	char* c2 = "hello world";
    	if (my_strlen(c1) - my_strlen(c2) >= 0) //返回无符号整数,恒大于等于0
    	{
    		printf("c1 > c2\n");
    	}
    	else
    	{
    		printf("c1 < c2\n");
    	}
    	
    	return 0;
    }
    

    输出

    c1 > c2
    

    二、不受限制的字符串函数

    有些字符串函数是“不受限制的”,也就是说它们只是通过寻找字符串结束标志’\0’来判断字符串长度,在使用这些函数时,程序员必须保证字符串不会溢出所在内存

    2.1 复制字符串函数 strcpy

    功能:将源指向的字符串复制到目标指向的数组中,包括’\0’,并返回目标数组起始地址
    库函数strlcpy函数声明:
    char * strcpy ( char * destination, const char * source );
    返回值:返回目标数组起始地址
    destination:目标数组起始地址
    source:源字符串起始地址

    模拟实现

    char * my_strcpy ( char * destination, const char * source )
    {
    	/*
    	将souce指向空间存放的字符复制到destination指向空间,并将source与destination指向后一个字符位置
    	当souce解引用是'\0'时循环停止
    	*/
    	assert(destination && source);//destination 与 source不能是空指针
    	char* des = destination;
    	while ((*destination++ = *source++) != '\0') 
    	{
    		;
    	}
    	return des;
    }
    

    警告:
    1. 如果source与destination指向空间在内存中出现重叠,结果是未定义的
    2. 如果源字符串比目标数组长,多余的字符仍将复制,将会出现非法访问内存的问题

    2.2 字符串连接函数 strcat

    功能:
    将源字符串的副本追加到目标字符串尾部。目标字符串中的’\0’被源字符串的第一个字符覆盖,并且在目标字符串中由这两个字符串联而成的新字符串的末尾添加’\0’

    库函数strcat声明:
    char * strcat ( char * destination, const char * source );
    返回值:返回目标字符串起始地址
    destination:目标字符串起始地址
    source:要追加的字符串起始地址

    模拟实现

    char * my_strcat ( char * destination, const char * source )
    {
    	assert(destination && source);//destination 与 source不能是空指针
    	char* des = destination;//记录目标字符串起始地址
    	while (*destination != '\0') //找到目标字符串'\0'位置
    	{
    		destination++;
    	}
    	while ( (*destination++ = *source++) != '\0') //开始追加复制
    	{
    		;
    	}
    	return des;
    }
    

    例1:将c2字符串追加到c1字符串中

    #include <stdio.h>
    #include <assert.h>
    
    char * my_strcat ( char * destination, const char * source )
    {
    	assert(destination && source);//destination 与 source不能是空指针
    	char* des = destination;//记录目标字符串起始地址
    	while (*destination != '\0') //找到目标字符串'\0'位置
    	{
    		destination++;
    	}
    	while ( (*destination++ = *source++) != '\0') //开始追加复制
    	{
    		;
    	}
    	return des;
    }
    int main()
    {
    	char c1[20] = "Hello";
    	char c2[20] = "World";
    	printf("%s\n",my_strcat(c1, c2));
    	return 0;
    }
    

    输出

    HelloWorld
    

    警告:
    1. 如果source与destination指向空间在内存中出现重叠,结果是未定义的
    2.程序员必须保证目标字符数组剩余空间能够保存整个源字符串

    2.3 字符串比较函数strcmp

    功能:
    对两个字符串的每一个对应字符逐一比较,直到发现不相等为止。标准规定:第一个字符串大于第二个字符串,则返回大于0的数字
    。第一个字符串等于第二个字符串,则返回0。第一个字符串小于第二个字符串,则返回小于0的数字。

    库函数strcmp声明
    int strcmp ( const char * str1, const char * str2 );
    str1:第一个字符串起始地址
    str2:第二个字符串起始地址

    模拟实现

    int my_strcmp(const char* str1, const char* str2)
    {
    	assert(str1 && str2);//str1 与 str2不能是空指针
    	while (*str1 == *str2) //当str1与str2指向空间对应字符相等时循环继续
    	{
    		if (*str1 == '\0')//当str1解引用是'\0'时,两个字符串对应字符全部比较完毕,都是相等的
    			return 0;
    		str1++;
    		str2++;
    	}
    	return *str1 - *str2; //返回str1与str2对应字符相差的ASCII值
    }
    

    警告:
    1.初学者常常会写if(strcmp(str1,str2))表达式,以为两个字符串相等,它的结果将是真。但是,这个结果恰恰相反,因为两个字符串相等返回0
    2.一个常见错误是以为第一个字符串大于第二个字符串返回1,小于则返回-1

    三、长度受限制的字符串函数

    标准库包含一些受限制的函数,这些函数接受一个显式的长度参数,用于限定进行复制或比较的字符数,防止难以预料的非法访问内存

    3.1 复制字符串函数 strncpy

    功能:将源字符串len个字符复制到目标字符串。如果strlen(source)小于len,destination用额外的’\0’填充到len长度。如果strlen(source)大于等于len,那么只有len个字符复制到destination中
    库函数strncpy声明
    char * strncpy ( char * destination, const char * source, size_t num );
    返回值:返回目标数组起始地址
    destination:目标数组起始地址
    source:源字符串起始地址
    num:需要复制字符个数

    模拟实现

    char* my_strncpy(char* destination, const char* source, size_t num)
    {
    	assert(destination && source);//destination 与 source不能是空指针
    	char* des = destination;
    	while (num) //需要复制字符个数
    	{
    		num--;
    		if ((*destination++ = *source++) != '\0') //如果source解引用等于'\0',代表strlen(source)小于len,需要用NULL填充到len长度
    			;
    		else
    			break;
    	}
    	while (num) //用'\0'填充到len长度
    	{
    		num--;
    		*destination++ = '\0';
    	}
    	return des;
    }
    

    警告:
    1. 如果source与destination指向空间在内存中出现重叠,结果是未定义的
    2. 当strlen(source)大于等于len并且strlen(destination)<=len,destination将不会以’\0’结尾

    3.2 字符串连接函数 strncat

    功能:从字符串source的开头拷贝n 个字符到destination字符串尾部,并追加’\0’字符。destination要有足够的空间来容纳要拷贝的字符串。如果n大于字符串source的长度,那么仅将src指向的字符串内容追加到dest的尾部。字符追加完成后,再追加’\0’。
    库函数strncat声明
    char * strncat ( char * destination, const char * source, size_t num );
    返回值:返回目标字符串起始地址
    destination:目标字符串起始地址
    source:要追加的字符串起始地址
    num:要追加字符个数

    模拟实现

    char* my_strncat(char* destination, const char* source, size_t num)
    {
    
    	assert(destination && source);//destination 与 source不能是空指针
    	char* des = destination;
    	while(*destination != '\0') //找到目标字符串'\0'位置
    	{
    		destination++;
    	}
    	while (num) //需要追加字符个数
    	{
    		num--;
    		if ((*destination = *source) != '\0')
    		{
    			destination++;
    			source++;
    		}
    		else
    		{
    			break;
    		}
    	}
    	*destination = '\0';
    	return des;
    }
    

    3.3 比较字符串函数 strncmp

    功能:比较两个字符串,但最多比较len个字节。如果两个字符串前len个字符相等返回0,str1大于str2返回大于0值,str1小于str2返回小于0的值

    库函数strncmp声明
    int strncmp ( const char * str1, const char * str2, size_t num );
    str1:第一个字符串起始地址
    str2:第二个字符串起始地址
    num:比较len个字节(字符)

    模拟实现

    int my_strncmp(const char* str1, const char* str2, size_t num)
    {
    	assert(str1 && str2);//str1 与 str2不能是空指针
    	while (num--) //需要比较字符个数
    	{
    		if (*str1 == *str2) //如果对应位置字符相等,向后一个字符继续比较
    		{
    			str1++;
    			str2++;
    		}
    		else
    		{
    			return *str1 - *str2; //返回str1与str2对应字符相差的ASCII值
    		}
    	}
    	return 0; //前num个字符都相等返回相等
    }
    

    四、 字符串查找函数

    4.1 查找一个子字符串函数 strstr

    功能:
    在str1查找整个str2第一次出现位置,并返回一个指向该位置的指针。如果str2没有完整地出现在str1的任何地方,函数返回NULL指针。如果str2是一个空字符串,函数返回str1指针

    库函数声明
    const char * strstr ( const char * str1, const char * str2 );
    返回值:str1中查找整个str2第一次出现位置或NULL
    str1:需要扫描的字符串
    str2:需要查找字符串(子串)

    模拟实现

    const char* my_strstr(const char* str1, const char* str2)
    {
    	//找到str1中出现str2第一个字符的位置
    	//判断相等
    	assert(str1 && str2);//str1 与 str2不能是空指针
    	const char* p1 = str1; 
    	if (*str2 == '\0') //当str2是空字符串返回str1
    		return p1;
    	while(*p1 != '\0') //当p1是空字符串返回NULL,否则进入循环
    	{
    		const char* p2 = str2; //存放str2中需匹配的字符地址
    		while (*p1 != *p2 && *p1 != '\0') //在str1中找到与str2第一个字符相同的字符地址,如果p1解引用等于'\0',表示str1中没有与str2第一个字符相同的字符
    		{
    			p1++;
    		}
    		if (*p1 == NULL)
    		{
    			return NULL;
    		}
    		const char* tmp = p1; 
    		while (*tmp == *p2 && *p2 != '\0') //检查是否与str2对应字符都相等
    		{
    			tmp++;
    			p2++;
    		}
    		if (*p2 == '\0')
    			return p1;
    		p1++;
    	} 
    	return NULL;
    }
    
    展开全文
  • 头文件:#include 功能:把从src地址开始且含有NULL结束符的字符串复制到以dest开始的地址空间说明:src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。返回指向dest的指针。函数实现: ...
  • C语言字符串相关的拷贝函数

    千次阅读 2022-04-03 22:09:50
    C语言字符串拷贝函数汇总对比 1.1、strcpy 函数原型char *strcpy(char *dest, const char *src) 需要注意的是如果目标数组 dest 不够大,而源字符串的长度又太长,可能会造成缓冲溢出的情况,所以在实际使用一定...
  • 函数是为了将一个字符串复制一部分到另一个字符串。麻烦看下我函数里边的注释,即我直接用string1做返回值,而不用string。返回的结果不一样。这里有个疑问,string2不是已经被存在string1里面了吗,为什么还要...
  • 字符串函数的使用
  • 头文件:#include <string.h> 定义函数:char *strcpy(char *dest, const char *src);...函数说明:strcpy()会将参数src 字符串拷贝至参数dest 所指的地址。 返回值:返回参数dest 的字符串起始地址。
  •   在C语言中拷贝字符串的时候可以直接使用库函数strcpy()来进行操作。下面通过一个例子来演示它的使用方法。 int main(int argc, char *argv[]) { char str1[10] = "abcdefg"; char str2[7] = "123456"; int ...
  • C语言字符串函数----strcat()函数用法

    千次阅读 2019-12-26 18:19:09
    字符串函数<string.h> strcat函数 strcat()函数用于拼接字符串 , 该函数接受两个字符串作为参数. 其函数原型 char *strcat (char *str1,const char *str2) 该函数将第二个字符串拷贝到第一个...
  • C语言字符串函数

    2020-02-23 11:08:09
    C语言提供的字符串处理函数,可以对字符串进行输入、输出、合并、修改、比较、转换、复制、搜索等操作,使用这些现成的函数可以大大减轻我们的编程负担。 用于输入输出的字符串函数,例如printf、puts、scanf、gets...
  • C语言字符串常用函数(18种)

    千次阅读 2022-03-20 15:14:00
    1. gets() (现在已经不怎么用了) (1) 头文件 #include <stdio.h>... s: 字符串首地址 (5) 返回值 成功: 返回读入的字符串 失败: NULL (6) 和scanf("%s",s);区别 scanf
  • C语言字符串处理函数

    2021-05-19 08:00:44
    1求字符串的长度strlen函数的使用运行结果:strlen(str1)=38,sizeof(str1)=4strlen(str1)=45, sizeof(str1)=100strlen(str1)=53, sizeof(str1)=5如果字符的个数等于字符数组的大小,那么strlen()的返回值就无法确定...
  • C语言字符串函数「超详细」

    千次阅读 多人点赞 2022-02-09 16:54:47
    字符串函数的使用是我们必须要掌握的知识点很多面试知识点包括对于程序当中运用到字符串函数的形式还是比较多的,所以我们是必须要了解掌握这个知识点的。尽管知识点比较多,但是我们还是要好好吸收消化这个知识点的...
  • 主要介绍了C语言实现字符串操作函数的实例的相关资料,开发程序的时候经常使用到一些字符串函数,例如求字符串长度,拷贝字符串……,需要的朋友可以参考下
  • 字符串输入如果想把一个字符串读取到程序中,必须首先预留存储字符串的空间,然后使用输入函数来获取这个字符串,C库提供了三个读取字符串函数:scanf()、gets()和fgets()。创建存储空间可以通过数组(char name[10...
  • strcpy是C++语言的一个标准函数 ,strcpy把含有’\0’结束符的字符串复制到另一个地址空间。 strcpy的头文件:string.h 一、认识并使用strcpy函数 1.库函数中strcpy函数的声明 char* strcpy(char* destination,const...
  • C语言中常见的字符串函数

    千次阅读 2022-03-29 23:17:10
    常见的字符串函数: strlen strcpy strcat strcmp 在使用字符串函数时,一定要使用 #include <string.h> 头文件 1、strlen 原型:strlen(str1); 函数功能:计算字符串str1的长度 返回值:一个int值 注意:字符...
  • C语言字符串分割函数split实现

    千次阅读 2018-01-20 13:25:55
    参考了到处是“坑”的strtok()—解读strtok()的隐含特性这一篇博文, 概括来说...不过怎么说多多少少有些缺陷,用起来不是很满意,因此自己动手实现了一个类似java中split的字符串分割函数,如下: #include #include
  • C语言常用的字符串函数

    千次阅读 2020-07-05 17:55:56
    ps:第一次用这玩意记录一下我还容易混淆的知识点,可能没那么精致哈,或者有些小错误,请...二、字符串复制 1.strcpy函数 头文件:string.h 格式:strcpy(字符数组,字符串) 返值:第一个参数的值,即一个字符的地
  • c语言中提供了许多有用的字符串处理函数
  • C语言字符串复制函数

    千次阅读 2011-11-26 00:08:12
    今天在CSDN上看到一道C语言字符串复制面试题,题目如下: 要求逆序输出输入的字符串,并且不能用第三方变量,函数的原型是 char* strNCopy(const char* source,char* dest)要求不用库函数, 根据要求我写了这样...
  • 字符串拷贝 函数的实现 : # define _CRT_SECURE_NO_WARNINGS # include <stdio.h> # include <stdlib.h> # include <string.h> void my_strcpy(char * dst, char *src) { int i = 0; for ...
  • C语言)常见字符函数字符串函数

    万次阅读 多人点赞 2018-07-23 10:49:50
    字符串通常放在常量字符串中或者字符数组中,字符串常量适用于那些对她不做修改的字符串函数。 string.h这个头文件里声明的函数原型也全是针对char数组的种种操作。 直到C++中才出现了string这个类 这篇文章就...
  • 打包文件包含两个文件:c文件源代码、Makefile文件,运行环境在Ubuntu14.04下,使用自带的gcc编译器,同学们只需将文件夹复制到某一目录下之后在终端执行:1.“make”生成“test”可执行文件;2. 输入“./test”运行...
  • C语言字符串处理函数拾锦

    千次阅读 2021-05-21 03:11:07
    之前在学习C语言的时候,知道C语言库函数中有很多字符串处理函数,但是没怎么好好利用它。最近,发现它们的作用实在太大了,而且有些是我从来都没有用过的。今天想整理一下,方便以后使用。比较容易理解的,就没有...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 78,642
精华内容 31,456
关键字:

c语言字符串复制函数