strcpy函数使用易错点!!!

1.参数构成:

 

 char * strcpy ( char * destination, const char * source );

        这是cplusplus.com给出的strcpy函数的标准参数形式,我们发现两个参数类型都是指针类型,但是实际使用过程中,strcpy函数的第一个形参,通常情况下却只能是数组名,而不能是指针变量。

char *p="1234";
char *q="abcd";
char str1[6]="Hello";
char str2[6]="World";
1.strcpy(p,q);
2.strcpy(p,str1);
3.strcpy(str1,p);
4.strcpy(str1,str2);

        在运行过程中 1.2. 都会报错,因为p,q都是指向了常量区字符串的首地址(一个只读内存区域),常量是不能被修改的,所以我们在将指针q和str1中的内容拷贝到指针p指向的存储区时会出错。

       char str1[6]="Hello"  字符数组str1拷贝了常量区字符串“abcd”的值,因此在 3.4. 中并不是直接修改了存储在常量区的字符串''Hello'',而是修改了存储在字符数组str1中常量区字符串''Hello''的拷贝。

2.总结:

       对于  strcpy  函数的第一个参数(输出型参数),它可以是数组名或者是指针变量只要它指向的内存区域是可写的。(最简单的就是让指针指向一个可写的数组)

示例代码:(通过动态分配内存实现)

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

int main() {
	// 指针变量指向动态分配的内存作为输出型参数
	char* p = malloc(20 * sizeof(char));
	if (p == NULL) {
		fprintf(stderr, "内存分配失败\n");
		return -1;
	}
	strcpy(p, "Hello");
	printf("第一次拷贝p: %s\n", p);

	// 修改指针指向的内容
	strcpy(p, "New World");
	printf("第二次拷贝p: %s\n", p);

	// 释放动态分配的内存
	free(p);

	return 0;

        对于 strcpy  的第二个参数(输入型参数),可以是数组名或者是指针变量,因为它只是读取数据,不会修改源内存区域。

  • 6
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值