照着书上敲的。。为啥不能运行

一墨千里无色 2017-12-04 11:04:37
#include<stdio.h>
int main()
{
void copy(const char *,char *);
const char *a="I am a girl.";
char *b="I think you are a foolish.";
copy(a,b);
printf("%s %s",a,b);
return 0;
}
void copy(const char *from,char *to)
{
int i;
for(;*from!='\0';from++,to++)
(*to)=(*from);
*to='\0';
}
...全文
416 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
a1317296227 2017-12-07
  • 打赏
  • 举报
回复
函数没有在主函数前定义吧。1楼已经给出正解了
ooolinux 2017-12-06
  • 打赏
  • 举报
回复
《深入理解C指针》
jena_wy 2017-12-05
  • 打赏
  • 举报
回复
常量不能赋值
走好每一步 2017-12-05
  • 打赏
  • 举报
回复
自己改就自己改的,还说是照书上敲的。。。
jiht594 2017-12-05
  • 打赏
  • 举报
回复
引用 7 楼 weixin_40884861 的回复:
对。。我小小的画蛇添足修改了一下。。粘错了。。。


原代码:

#include<stdio.h>
int main()
{
void copy(char *,char *);
char *a="I am a girl.";
char b[]="I think you are a foolish.";
char *p=b;
copy(a,p);
printf("%s %s",a,b);
return 0;
}
void copy(char *from,char *to)
{
int i;
for(;*from!='\0';from++,to++)
*to=*from;
*to='\0';
}
这个可以输出了。。。。。。。。。

虽然不是很懂原理。为啥指针变成数组就可以了呢。数组名不就是相当于指针吗,为啥b必须用数组呢。。
我知道我学的太少了,但是书上解释不清楚或者说是没有解释。
请教各位大佬!


那就换本书,真的。别舍不得
两水先木示 2017-12-05
  • 打赏
  • 举报
回复
char *p="abcde"; 这种方式是定义了一个字符型指针,指向常量字符串"abcde" char p[]="abcde"; 这种方式是定义了一个字符数组,其长度自动设置其等于"abcde", 所以第一种指向了常量区,无法修改;第二种定义了普通的数组变量,放在栈中,可以修改
小熊之怒 2017-12-05
  • 打赏
  • 举报
回复
什么书,不太好啊
paschen 2017-12-04
  • 打赏
  • 举报
回复
你的字符串是在常量区的,不能修改,如果要修改,你需要把字符串存到字符数组(栈)中,改成:char b[100] = "I think you are a foolish.";
真相重于对错 2017-12-04
  • 打赏
  • 举报
回复
把那本书扔掉,换一本!
被遗忘de角落 2017-12-04
  • 打赏
  • 举报
回复
#include<stdio.h> void copy(const char *,char *); int main() { //void copy(const char *,char *);
一墨千里无色 2017-12-04
  • 打赏
  • 举报
回复
对。。我小小的画蛇添足修改了一下。。粘错了。。。 原代码: #include<stdio.h> int main() { void copy(char *,char *); char *a="I am a girl."; char b[]="I think you are a foolish."; char *p=b; copy(a,p); printf("%s %s",a,b); return 0; } void copy(char *from,char *to) { int i; for(;*from!='\0';from++,to++) *to=*from; *to='\0'; } 这个可以输出了。。。。。。。。。 虽然不是很懂原理。为啥指针变成数组就可以了呢。数组名不就是相当于指针吗,为啥b必须用数组呢。。 我知道我学的太少了,但是书上解释不清楚或者说是没有解释。 请教各位大佬!
自信男孩 2017-12-04
  • 打赏
  • 举报
回复
#include<stdio.h>

    void copy(const char *,char *);
int main()
{
    const char *a="I am a girl.";
    char b[]="I think you are a foolish.";
    copy(a,b);
    printf("%s\t %s\n",a,b);
    return 0;
}
void copy(const char *from,char *to)
{
    int i;
    for(;*from!='\0';from++,to++)
        (*to)=(*from);
    *to = '\0';
}
我相信这个代码不是完全抄书本上的。 b是指针,指向了只读数据段,所以不能修改; 把b由指针变成数组就可以,因为定义了数组,就是在栈上申请了空间,就可以进行读写了。参考上面的代码;
倚栏|听风 2017-12-04
  • 打赏
  • 举报
回复
引用 3 楼 paschen 的回复:
你的字符串是在常量区的,不能修改,如果要修改,你需要把字符串存到字符数组(栈)中,改成:char b[100] = "I think you are a foolish.";
Camel_J 2017-12-04
  • 打赏
  • 举报
回复
const是限定一个变量不允许被改变,产生静态作用。

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧