ymj俊俊 发表于 2019-10-15 17:53:13

代码运行错误,求指导

#include<stdio.h>

void main()
{
   void copy_string(char *p,char *q);
   char *a="hello";
   char b="hi";
   printf("a is:%s\n",a);
   printf("b is:%s\n",b);
   copy_string(a,b);
   printf("copy result is:\n");
   printf("a is:%s\n",a);
   printf("b is:%s\n",b);
}
void copy_string(char *p,char *q)
{
   int i=0;
   for(i=0;*p!='0';i++)
   {
       *p=*q;
                p++;
                q++;
   
   }
    *q='\0';
}

ba21 发表于 2019-10-15 18:12:37

p q顺序别搞错 了。

如你代码中 只能做 字符串a copy 到 数组b 中; 反过来 copy 是不行的。

#include<stdio.h>

void main()
{
   void copy_string(char *a,char *b);

   char *a="hello";
   char b="hi";

   printf("a is:%s\n",a);
   printf("b is:%s\n",b);

   copy_string(a,b);
   printf("copy result is:\n");
   printf("a is:%s\n",a);
   printf("b is:%s\n",b);
}
void copy_string(char *a, char *b)
{
   int i=0;

   for (i=0; *a != '\0'; i++)
   {
       *b = *a;
       a++;
       b++;
   
   }

    *b = '\0';
}

jackz007 发表于 2019-10-15 18:22:15

本帖最后由 jackz007 于 2019-10-15 18:24 编辑

      copy_string(char * p , char * q)代码存在重大错误,通过赋值关系 * p = * q 看,应该 q 是源指针,可是,在循环中,判断继续的条件却是 * p != '0',明显是把 p 当成源指针了。而且,还是错误表达,因为空字符并不是 '0',而是 '\0' 。
      我把代码优化了一下,楼主可以参考:
#include<stdio.h>

void copy_string(char * p , const char * q)
{
      for(; * q != '\0';) * p ++ = * q ++ ;
      * p = '\0'                        ;
}

int main()
{
      const char * a = "hello"   ;
      char b="hi"            ;
      printf("a is : %s\n" , a)    ;
      printf("b is : %s\n" , b)    ;
      copy_string(b , a)         ;
      printf("copy result is :\n") ;
      printf("a is : %s\n" , a)    ;
      printf("b is : %s\n" , b)    ;
}
页: [1]
查看完整版本: 代码运行错误,求指导