C语言strcpy的用法。

发布网友 发布时间: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函数是将后一个字符串复制给前一个字符串。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com