卧室高手 发表于 2015-1-16 22:44:10

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

#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;
        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数组暂时没用 编译可以通过 但是运行不能得到结果 一直没想明白 求各位同好告诉我哪里错了

雪是梅之香 发表于 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清空,还是覆盖啊)

卧室高手 发表于 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】吗 为什么还是不对?

雪是梅之香 发表于 2015-1-17 10:45:07

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

你后面不是又写了一个循环吗,那不就把指针位置变了吗

ghvn7777 发表于 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;
        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);
}

卧室高手 发表于 2015-1-17 11:40:37

雪是梅之香 发表于 2015-1-17 10:45
你后面不是又写了一个循环吗,那不就把指针位置变了吗

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

*b=b;
        for(i=0;*z!='\0';i++,)
        {
                *b++=*z++;
        }
        *b='\0';
        printf("%s",b);

卧室高手 发表于 2015-1-17 11:41:15

ghvn7777 发表于 2015-1-17 10:50
#include




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

*b=b;
        for(i=0;*z!='\0';i++,)
        {
                *b++=*z++;
        }
        *b='\0';
        printf("%s",b);

雪是梅之香 发表于 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;
      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的初始位置

卧室高手 发表于 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赋值了?

雪是梅之香 发表于 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回到初始位置

卧室高手 发表于 2015-1-17 17:14:24

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

已完全理解 多谢你的解答
页: [1]
查看完整版本: c语言新手 第一次发帖 求帮忙解答