鱼C论坛

 找回密码
 立即注册
查看: 1598|回复: 2

[已解决]代码运行错误,求指导

[复制链接]
发表于 2019-10-15 17:53:13 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include<stdio.h>

void main()
{
   void copy_string(char *p,char *q);
   char *a="hello";
   char b[20]="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';
}
最佳答案
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' 。
        我把代码优化了一下,楼主可以参考:
  1. #include<stdio.h>

  2. void copy_string(char * p , const char * q)
  3. {
  4.         for(; * q != '\0';) * p ++ = * q ++ ;
  5.         * p = '\0'                          ;
  6. }

  7. int main()
  8. {
  9.         const char * a = "hello"     ;
  10.         char b[20]="hi"              ;
  11.         printf("a is : %s\n" , a)    ;
  12.         printf("b is : %s\n" , b)    ;
  13.         copy_string(b , a)           ;
  14.         printf("copy result is :\n") ;
  15.         printf("a is : %s\n" , a)    ;
  16.         printf("b is : %s\n" , b)    ;
  17. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2019-10-15 18:12:37 | 显示全部楼层
p q顺序别搞错 了。

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

  1. #include<stdio.h>

  2. void main()
  3. {
  4.    void copy_string(char *a,char *b);

  5.    char *a="hello";
  6.    char b[20]="hi";

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

  9.    copy_string(a,b);
  10.    printf("copy result is:\n");
  11.    printf("a is:%s\n",a);
  12.    printf("b is:%s\n",b);
  13. }
  14. void copy_string(char *a, char *b)
  15. {
  16.    int i=0;

  17.    for (i=0; *a != '\0'; i++)
  18.    {
  19.        *b = *a;
  20.        a++;
  21.        b++;
  22.    
  23.    }

  24.     *b = '\0';
  25. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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' 。
        我把代码优化了一下,楼主可以参考:
  1. #include<stdio.h>

  2. void copy_string(char * p , const char * q)
  3. {
  4.         for(; * q != '\0';) * p ++ = * q ++ ;
  5.         * p = '\0'                          ;
  6. }

  7. int main()
  8. {
  9.         const char * a = "hello"     ;
  10.         char b[20]="hi"              ;
  11.         printf("a is : %s\n" , a)    ;
  12.         printf("b is : %s\n" , b)    ;
  13.         copy_string(b , a)           ;
  14.         printf("copy result is :\n") ;
  15.         printf("a is : %s\n" , a)    ;
  16.         printf("b is : %s\n" , b)    ;
  17. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-3 12:16

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表