鱼C论坛

 找回密码
 立即注册
查看: 2039|回复: 10

c语言新手 第一次发帖 求帮忙解答

[复制链接]
发表于 2015-1-16 22:44:10 | 显示全部楼层 |阅读模式

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

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

x
#include<stdio.h>


void handle(char *a,char *b);


void main()
{
        char *a="my name is li jilin.";
        char b[]="mr.zhang haoling is very happy.";
        handle(a,b);
}

void handle(char *a,char *b)
{
        int i;
        char c[50];
        char *z;
        z=c;
        for(i=3;i<16;i++)
        {
                *z=*(b+i);
                z++;
        }
        *z='\0';
        z=c;
        for(i=0;*z!='\0';i++)
        {
                *b++=*z++;
        }
        printf("%s",b);
       




       
}


上面这个程序的目的是把b这个数组中的“zhao haoling”复制到b数组中 a数组暂时没用 编译可以通过 但是运行不能得到结果 一直没想明白 求各位同好告诉我哪里错了

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-1-17 01:20:25 | 显示全部楼层
楼主可以在主函数中输出一下数组b,此时数组b[]="zhang haolinging is very happy.""zhang haolinging is very happy."
而你在自定义函数中的指针b此时指向原函数b数组的"ing is very happy."
输出当然是"ing is very happy."
问题主要出在自定义函数的循环过程里,没有让b指针返回到初始位置
(还有一点不明白的地方就是楼主是否想要把原来的数组b清空,还是覆盖啊)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-1-17 10:40:36 | 显示全部楼层
雪是梅之香 发表于 2015-1-17 01:20
楼主可以在主函数中输出一下数组b,此时数组b[]="zhang haolinging is very happy.""zhang haolinging is v ...

我是想要把原来的数组覆盖 多谢解答 不过我还是没明白 在给z附‘\0’后 我不是写了一个 z=c 重新让z指针回到c【0】吗 为什么还是不对?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-1-17 10:45:07 | 显示全部楼层
卧室高手 发表于 2015-1-17 10:40
我是想要把原来的数组覆盖 多谢解答 不过我还是没明白 在给z附‘\0’后 我不是写了一个 z=c 重新让z指针 ...

你后面不是又写了一个循环吗,那不就把指针位置变了吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-1-17 10:50:42 | 显示全部楼层

#include<stdio.h>


void handle(char *a,char *b);


void main()
{
        char *a="my name is li jilin.";
        char b[]="mr.zhang haoling is very happy.";
        handle(a,b);
}

void handle(char *a,char *b)
{
        int i;
        char c[50];
        char *z;
        z=c;
        for(i=3;i<16;i++)
        {
                *z=*(b+i);
                z++;
        }
        *z='\0';
        z=c;
        for(i=0;*z!='\0';i++)
        {
                *(b+i)=*z++;        //这儿你原来改变了b的值
        }
    printf("%s",b);
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-1-17 11:40:37 | 显示全部楼层
雪是梅之香 发表于 2015-1-17 10:45
你后面不是又写了一个循环吗,那不就把指针位置变了吗

多谢解答 我已经写好了 但是我发现错的循环部分改成下面写法还是会错  这是为什么了

*b=b[0];
        for(i=0;*z!='\0';i++,)
        {
                *b++=*z++;
        }
        *b='\0';
        printf("%s",b);
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-1-17 11:41:15 | 显示全部楼层

多谢解答 我已经写好了 但是我发现错的循环部分改成下面写法还是会错  这是为什么了

*b=b[0];
        for(i=0;*z!='\0';i++,)
        {
                *b++=*z++;
        }
        *b='\0';
        printf("%s",b);
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-1-17 12:30:01 | 显示全部楼层
#include <stdio.h>
#include <stdlib.h>
void handle(char *a,char *b);
void main()
{
        char *a="my name is li jilin.";
        char b[]="mr.zhang haoling is very happy.";
        handle(a,b);
}
void handle(char *a,char *b)
{
        int i;
        char c[50];
        char *z,*x;
        z=c;
        x=b;
        for(i=3;i<16;i++)
        {
                *z=*(b+i);
                z++;
        }
        *z='\0';
        z=c;
        for(i=0;*z!='\0';i++)
        {
            *b++=*z++;
        }
        *b='\0';
        b=x;
        printf("%s",b);
}

稍微加了点东西,就出来预期结果了
主要是在循环之后,将指针b知道数组b的初始位置
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-1-17 14:04:51 | 显示全部楼层
雪是梅之香 发表于 2015-1-17 12:30
稍微加了点东西,就出来预期结果了
主要是在循环之后,将指针b知道数组b的初始位置

谢谢  我已经做出来了 但是我还是有点不理解
  for(i=0;*z!='\0';i++)
        {
            *b++=*z++;
        }
这一句中  你在函数里定义了一个*X指针后,b++=c++  可以成功赋值
我在调试中发现   没加x指针 为何Z就不能对b赋值了?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-1-17 14:29:34 | 显示全部楼层
卧室高手 发表于 2015-1-17 14:04
谢谢  我已经做出来了 但是我还是有点不理解
  for(i=0;*z!='\0';i++)
        {

我没有b++=c++啊
依然是用z对b进行赋值啊,定义一个x,是想让x记住数组b的初始位置,这样的话,赋值完成后可以让指针b回到初始位置
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-1-17 17:14:24 | 显示全部楼层
雪是梅之香 发表于 2015-1-17 14:29
我没有b++=c++啊
依然是用z对b进行赋值啊,定义一个x,是想让x记住数组b的初始位置,这样的话,赋值完成 ...

已完全理解 多谢你的解答
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-25 13:20

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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