小白桦 发表于 2017-2-15 21:54:53

有关字符串复制

(1)想知道为什么下面有关字符串复制的代码有什么问题(无法复制字符串,出现烫烫烫烫)
(2)为什么我调用copy_string时括号内要写(a,b)而不是(a[],b[])
谢谢!
#include<stdio.h>

void main()
{
        char a[]="It's me!",b;
        void copy_string(char a[],char b[]);
        printf("a[]=%s\n",a);
        copy_string(a,b);                  //为什么不能写copy_string(a[],b[]);
        printf("b[]=%s\n",b);
}

void copy_string(char a[],char b[])    //将a数组中字符串复制到b数组中
{
        int i;
        for(i=0;*(a+i)!='\0';i++);
        {
                *(b+i)=*(a+i);
        }
        *(b+i)='\0';
}

醴泉之水 发表于 2017-2-16 09:22:02

#include<stdio.h>

void copy_string(char *a, char *b);      //函数声明,不要放到main函数里边,这样会显得很乱

int main(void)
{
      char a[]="It's me!",b;

      printf("a[]=%s\n",a);
      copy_string(a,b);                  //为什么不能写copy_string(a[],b[]);
      printf("b[]=%s\n",b);
      
      return 0;                           //VS 不支持返回值为空的main函数,环境问题
}

void copy_string(char a[], char b[])    //将a数组中字符串复制到b数组中这里等同于copy_string(char *a, char *b) 这里也是把数组的首地址传到了函数,进行了址传递,函数内容也是对指针的操作
{
      int i;
      for(i = 0;*(a+i)!='\0';i++)       //这里要去掉该行末尾的分号,不然大括号里边的内容只会执行一次,执行时i=8
      {
                *(b+i)=*(a+i);
      }
      *(b+i)='\0';
}

小白桦 发表于 2017-2-16 15:45:44

醴泉之水 发表于 2017-2-16 09:22
#include

void copy_string(char *a, char *b);      //函数声明,不要放到main函数里边,这样会显得很 ...

明白了,谢谢!
页: [1]
查看完整版本: 有关字符串复制