发布网友 发布时间:2022-04-25 16:54
共5个回答
热心网友 时间:2023-10-20 12:01
你看好了:
char a[20] = "abcde"
strcpy(&a[1], a)函数是逐个字符拷贝,
首先拷贝第一个字符,a[0] == 'a';a[1] = a[0]; 即a[1] = 'a';
然后拷贝第二个字符,此时a[1] == 'a'; a[2] = a[1];即a[2] = 'a';
依次类推!!!a[0] = 'a'没什么用,其实初始a[0]就等于'a'的!
热心网友 时间:2023-10-20 12:01
strcpy函数:
原型声明:extern char *strcpy(char* dest, const char *src);
头文件:#include
功能:把从src地址开始且含有NULL结束符的字符串复制到以dest开始的地址空间
说明:src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。
返回指向dest的指针。
使用实例:
#include;
char * strcpy(char * strDest,const char * strSrc)
{
char * strDestCopy=strDest;
if ((strDest==NULL)||(strSrc==NULL))
throw "Invalid argument";
while ((*strDest++=*strSrc++)!='\0');
return strDestCopy;
}
void main()
{
char a[20],c[]="i am teacher!";
try
{
strcpy(a,c);
}
catch(char* strInfo)
{
cout<
exit(-1);
}
cout<
}
2. strcat函数:
原型:
extern char *strcat(char *dest,char *src)
头文件:
#include
在C++中,则存在于头文件中。
功能:
把src所指字符串添加到dest结尾处(覆盖dest结尾处的'\0')并添加'\0'。
说明:
src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。
返回指向dest的指针。
举例
// strcat.c
#include
#include
main()
{
char d[20]="Golden Global";
char *s=" View";
clrscr();
strcat(d,s);
printf("%s",d);
getchar();
return 0;
}
程序执行结果为:Golden Global View
热心网友 时间:2023-10-20 12:02
我搞不清楚你哪里来的b这个变量。如果问题补充里的&b[1]是&a[1]的话,a[0]='a'对最后的输出没有影响,因为输出的串地址是从a[1]开始的,都略过a[0]了。
再然后,strcpy是逐字节拷贝的,strcpy(&a[1],a)的时候:
一开始,&a[1]="bcde",a="abcde",第一次拷贝把a的第一个字符'a'覆盖了&a[1]的第一个字符'b',&a[1]变成"acde",但是&a[1]是a的一部分,此时a串变成了"aacde",于是,当拷贝第二个字符时,第二个字符仍然是'a'……到最后,所有拷贝的都是'a'。
热心网友 时间:2023-10-20 12:02
这是典型的源地址与目的地址“重叠”现象,但是很遗撼,C++中的strcpy并没有为我们解决这一点(它考虑到了),所以这个函数只是按部就班地从源地址复制到目的地址。
基于上述原因,可以看到拷贝一始,源字符串已经被“破坏了”,从第二个字符起,它都和前一个字符相等,这就是结果。所以b[0]决定了最后的拷贝结果。
strcpy的原型
char* strcpy(char* dest,char* src){
char* address=dest;
while('\0'!=(*dest++=*src++));
return address;
}
注意上面while后面的; 号不是多余的!~
热心网友 时间:2023-10-20 12:03
b没有声明,而且strcpy函数用错了,strcpy函数是将后一个字符串复制给前一个字符串。