字符串指针传参与数组传参

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

以上就是库函数strcpy的具体功能要求。

下面是我所写的my_strcpy

请看这段代码的问题:

    char* str1 = "abcdefgehisdhfiadisf";
	const char* str2 = "safd234";
	my_strcpy1(str1, str2);
	printf("%s\n", str1);
	printf("%s\n", my_strcpy1(str1, str2));

下面报错的原因就是出现在这个main函数中,你可以看出来嘛?

 1111111111111111111111111111111111111111111111111111111111111111111

 这样修改之后代码就正常编译了,这里的实参是俩个指针,我们当然需要使用&str的方式来进行传参呀!!!

字符指针使用&str传参

 

 从上面到这部分内容都是我在胡扯,用法都是错误的。

 111111111111111111111111111111111111111111111111111111111111111111111111111111111111

 实际的问题出在哪里呢?我给str传入的是一个常量字符串,想要改变人家str指向的常量字符串,这是根本无法实现的,这也就是为什么编译器报错需要给出一个可修改的左值。

 数组使用 数组名进行传参

那为什么使用数组就可以直接传参呢?

 定义char类型的数组arr1相当于新开辟了一段空间,里面放的是我放入的字符串内容,我当然可以对我的数组内容进行修改。

源码如下:


#include<stdio.h>
#include<assert.h>

char* my_strcpy1(char* dst, const char* src)
{
	char* cp = dst;
	assert(dst && src);
	while (*cp++ = *src++)
	{
		;
	}
	/* Copy src over dst */
	return(dst);
}

int main()
{
	char* str1 = "abcdefgehisdhfiadisf";
	const char* str2 = "safd234";
	my_strcpy1(&str1, &str2);
	printf("%s\n", str1);
	printf("%s\n", my_strcpy1(&str1, &str2));

	/*char arr1[20] = "xxxxxxxxxxxxx";
	char arr2[] = "hello";
	my_strcpy1(arr1, arr2);
	printf("%s\n", arr1);
	printf("%s\n", my_strcpy1(arr1, arr2));*/
	return 0;
}

最后:字符串常量是无法修改的

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值