鱼C论坛

 找回密码
 立即注册
查看: 1264|回复: 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' 。
        我把代码优化了一下,楼主可以参考:
#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[20]="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)    ;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

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

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

   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 *a, char *b)
{
   int i=0;

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

    *b = '\0';
}
想知道小甲鱼最近在做啥?请访问 -> 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' 。
        我把代码优化了一下,楼主可以参考:
#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[20]="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)    ;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-16 17:04

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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