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数组暂时没用 编译可以通过 但是运行不能得到结果 一直没想明白 求各位同好告诉我哪里错了
楼主可以在主函数中输出一下数组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 01:20
楼主可以在主函数中输出一下数组b,此时数组b[]="zhang haolinging is very happy.""zhang haolinging is v ...
我是想要把原来的数组覆盖 多谢解答 不过我还是没明白 在给z附‘\0’后 我不是写了一个 z=c 重新让z指针回到c【0】吗 为什么还是不对? 卧室高手 发表于 2015-1-17 10:40
我是想要把原来的数组覆盖 多谢解答 不过我还是没明白 在给z附‘\0’后 我不是写了一个 z=c 重新让z指针 ...
你后面不是又写了一个循环吗,那不就把指针位置变了吗
#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 10:45
你后面不是又写了一个循环吗,那不就把指针位置变了吗
多谢解答 我已经写好了 但是我发现错的循环部分改成下面写法还是会错这是为什么了
*b=b;
for(i=0;*z!='\0';i++,)
{
*b++=*z++;
}
*b='\0';
printf("%s",b); ghvn7777 发表于 2015-1-17 10:50
#include
多谢解答 我已经写好了 但是我发现错的循环部分改成下面写法还是会错这是为什么了
*b=b;
for(i=0;*z!='\0';i++,)
{
*b++=*z++;
}
*b='\0';
printf("%s",b); #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 12:30
稍微加了点东西,就出来预期结果了
主要是在循环之后,将指针b知道数组b的初始位置
谢谢我已经做出来了 但是我还是有点不理解
for(i=0;*z!='\0';i++)
{
*b++=*z++;
}
这一句中你在函数里定义了一个*X指针后,b++=c++可以成功赋值
我在调试中发现 没加x指针 为何Z就不能对b赋值了? 卧室高手 发表于 2015-1-17 14:04
谢谢我已经做出来了 但是我还是有点不理解
for(i=0;*z!='\0';i++)
{
我没有b++=c++啊
依然是用z对b进行赋值啊,定义一个x,是想让x记住数组b的初始位置,这样的话,赋值完成后可以让指针b回到初始位置 雪是梅之香 发表于 2015-1-17 14:29
我没有b++=c++啊
依然是用z对b进行赋值啊,定义一个x,是想让x记住数组b的初始位置,这样的话,赋值完成 ...
已完全理解 多谢你的解答
页:
[1]