//原型声明: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;
}
最后:字符串常量是无法修改的