项目开发字符串模型strstr_while

本文详细介绍了使用C语言进行字符串拷贝的各种方法和技术细节,包括直接字符拷贝、使用指针变量等,并通过具体代码示例展示了每种方法的工作原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#define  _CRT_SECURE_NO_WARNINGS 
#include <stdlib.h>
#include <string.h>
#include <stdio.h>

void main71()
{
    char a[] = "i am a student";
    char b[64];
    int  i = 0;

    for (i=0; *(a+i) != '\0'; i++)
    {
        *(b+i) = *(a+i);
    }

    //0没有copy到b的buf中.

    b[i] = '\0'; //重要
    printf("a:%s \n", a);
    printf("b:%s \n", b);

    system("pause");
    return ;
}

//字符串copy函数技术推演

//字符串copy函数

//form形参 形参to 的值 不停的在变化....
//不断的修改了from和to的指向
void copy_str21(char *from, char *to)
{
    for (; *from!='\0'; from++, to++)
    {
         *to = *from;
    }
    *to = '\0';

    return ;
}

//*操作 和++的操作
//++ 优先级高 
void copy_str22(char *from, char *to)
{
    for (; *from!='\0';)
    {
        *to++ = *from++;  //  先 *to = *from;  再from++, to++ 
    }
    *to = '\0'; //

    return ;
}

void copy_str23(char *from, char *to)
{
    while( (*to = *from) != '\0' )
    {
        from ++; 
        to ++;
    }
}

void copy_str24(char *from , char *to)
{
    while ( (*to++ = *from++) != '\0')
    {
        ;
    }
}


void copy_str25(char *from , char *to)
{
    //*(0) = 'a';
    while ( (*to++ = *from++) )
    {
        ;
    }
}


void copy_str25_err(char *from , char *to)
{
    //*(0) = 'a';
    while ( (*to++ = *from++) )
    {
        ;
    }

    printf("from:%s \n", from);
    
}


//不要轻易改变形参的值, 要引入一个辅助的指针变量. 把形参给接过来.....
int copy_str26_good(char *from , char *to)
{
    //*(0) = 'a';
    char *tmpfrom = from;
    char *tmpto = to;
    if ( from == NULL || to == NULL)
    {
        return -1;
    }


    while ( *tmpto++ = *tmpfrom++ ) ;  //空语句

    printf("from:%s \n", from);
        
}

int main111()
{
    int ret = 0;
    char *from = "abcd";
    char buf2[100]; 
    //copy_str21(from, buf2);
    //copy_str22(from,buf2);
    //copy_str23(from, buf2);
    //copy_str24(from, buf2);
    //copy_str25(from ,buf2);
    //printf("buf2:%s \n", buf2);

    {
        //错误案例
        char *myto = NULL;  //要分配内存
        //copy_str25(from,myto );
    }
    {
        char *myto = NULL;  //要分配内存
        
        ret = copy_str26_good(from, myto);
        if (ret != 0)
        {
            printf("func copy_str26_good() err:%d  ", ret);
            return ret;
        }
    }
    system("pause");
    return ret;
}


int main777()
{
    int ret = 0;
    char *from = "abcd";
    char buf2[100]; 

    printf("copy_str25_err begin\n");
    copy_str25_err(from, buf2);
    copy_str26_good(from, buf2);
    printf("copy_str25_err end\n");
    return 0;
}

 

 

转载于:https://www.cnblogs.com/yaozhenhua/p/9416461.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值