7.3 字符串-输入输出及实现字符串拷贝

一、输出字符串:puts()自动换行

输出方式:①puts("请输入一个字符串\n");

                  ②puts(p);

                  ③printf("%s\n",p);

p是地址变量

#include <stdio.h>

int main()
{
	char *p = "hello";
	puts("请输入一个字符串\n");
	puts(p);
	printf("%s\n",p);
	return 0;
}

二、获取字符串

①scanf("%s",p)

②gets:函数原型:char *gets(char *str);

gets(str);
puts(str);

三、自己实现字符串拷贝函数

1.strcpy

①备份被拷贝目标地址,进行数据赋值

#include <stdio.h>
char* myStrcpy(char *des,char *src){
	if(des ==NULL || src ==NULL){    //判断指针是否是空指针
		return NULL;
	}
	
	char *bak = des;	//备份目标地址des
	while(*src !='\0'){	
		*des = *src;
		des++;			//拷贝地址偏移
		src++;
	}
	*des = '\0';      	//给字符串赋予结束标志
	
	return bak;		//不是des,因为des已经偏移了不是首地址
}
int main()
{
	char str[128]={'\0'};
	char *p = "hello,world";
	myStrcpy(str,p);
	puts(str);
	return 0;
}

②简化指针赋值与偏移

char* myStrcpy2(char *des,char *src){
	if(des ==NULL || src ==NULL){
		return NULL;
	}
	
	char *bak = des;	//备份目标地址des
	while(*src !='\0'){	
		*des++ = *src++;			//des先拷贝给src,再同时都偏移
		
	}
	*des = '\0';      	//给字符串赋予结束标志
	
	return bak;		//不是des,因为des已经偏移了不是首地址
}

*des ++= *src++的过程是先*des=*src这个赋值过程,再进行des++和src++完成指针的偏移

③ 赋值的同时进行判断

char* myStrcpy3(char *des,char *src){
	if(des ==NULL || src ==NULL){
		return NULL;
	}
	
	char *bak = des;	//备份目标地址des
	while((*des++ = *src++) !='\0'){	
				//des先拷贝给src,再同时都偏移
		
	}
	*des = '\0';      	//给字符串赋予结束标志
	
	return bak;		//不是des,因为des已经偏移了不是首地址
}

(*des++ = *src++) !='\0'中,(*des++ = *src++)用的是一个“=”,表示赋值,但赋值归赋值,后面还是可以结判断语句的,这边是进行间接的赋值。

2.strncpy

拷贝相应数量字符

char* myStrncpy(char *des,char *src,int count){
	if(des ==NULL || src ==NULL){
		return NULL;
	}
	
	char *bak = des;	//备份目标地址des
	while(*src !='\0' && count>0){
		*des++ = *src++;
		count--;
	}
	if(count > 0 ){        //判断是否有剩余数组数据没填充
		while(count>0){
			count--;
			*des++ = '\0';    
		}
		return des;     //以防后面多赋予结束标志
	}
	*des = '\0';      	//给字符串赋予结束标志
	
	return bak;		//不是des,因为des已经偏移了不是首地址
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值