C语言:字符串API拷贝_strcpy(),strncpy,给(数组名)赋值字符串要用strcpy

1.字符串的拷贝API:strcpy()

不能给数组名赋值字符串的情况,要用strcpy,具体的请看下面

因为数组名是常量,不能直接赋值字符串

数组名是常量-详解,点击跳转

字符串常量:
1.与字符数组的关系: 在C语言中没有专门的字符串变量,如果想将一个字符串存放在变量中以便保存,必须使用字符数组,即用一个字符型数组来存放一个字符串,数组中每一个元素存放一个字符。例如“char a[10]=“love”.”
.
2.与指针的关系: 在程序中,字符串常量会生成一个“指向字符的常量指针”。当一个字符串常量出现于一个表达式中时,表达式所使用的值就是这些字符所存储的地址,而不是这些字符本身。因此,你可以把字符串常量赋值给一个“指向字符的指针”,例如:char *a = “123” ; a = “abc”;,*后者指向这些字符所存储的地址。
.
但是,你不能把字符串常量赋值给一个字符数组,因为字符串常量的直接值是一个指针,而不是这些字符本身。例如:char a[5];a[0] = “a”;就是错误的,报错结果:invalid conversion from 'const char’ to ‘char’。
.
例如:char a[10]=“love”,的意思就是用字符串“love”来初始化字符数组a的内存空间,而数组的首地址也就是“love”字符串的地址。

	char strDest[128]= {'\0'};  		
  	strDest = "hello world";			错误的,不能将字符串赋值数组。要用strcpy  
    printf("%s\n",strDest);

	char strDest[128];  		
  	strDest = "hello world";			错误的,不能将字符串赋值数组。要用strcpy  
    printf("%s\n",strDest);

正确给数组赋值字符串:

 原型:char *strcpy(char* dest,const char *src)
 - 第一个参数dest:目标
 - 第二个参数src:源
	
	 
  	char strDest[128] = {'\0'};  		第一种定义初始化数组,平常数组
	char *strSrc = "hello world";
    
    strcpy(strDest,strSrc);
    printf("复制字符串完毕:%s\n",strDest);
   	
===============================================================================
    char *strDest;                 		第二种定义初始化数组,用malloc(以下的都是以这个来讲)
    strDest = (char *)malloc(128);
    memset(strDest,'\0',128);  			此时的128换成sizeof(strDest)/sizeof(strDest[0] = 4不可以,
							   			因为此时strDest是野指针,指针在windows中占4个字节
    char *strSrc = "hello world";		不能将字符串赋值数组。要用strcpy。错误情况:strSrc = "hello world";		
      
    strcpy(strDest,strSrc);
    printf("复制字符串完毕:%s\n",strDest);
===============================================================================    
	memset(strDest,'\0',sizeof(strDest)/sizeof(strDest[0]));  	初始化,重置数组(注意细节)strcpy(strDest,"再一次调用strcpy :hello world");
    puts(strDest);

2.字符串的拷贝API:strncpy()

	原型:char *strncpy(char *destinin, char *source, int maxlen);
	- 第一个参数dest:目标
 	- 第二个参数src:源
 	- 第三个参数src:最大长度,就是要拷贝几个

	memset(strDest,'\0',128);  	初始化,重置数组。这里用sizeof(strDest)/sizeof(strDest[0])结果会出错(细节)
    strncpy(strDest,"TheLuk",3);
    puts(strDest);	
    - 输出的结果是:The
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

枕上

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值