标题:求大神解释,问了同学和老师都没法解释。(谭浩强c第三版上面的一个关于指针 ...
只看楼主
张炎逸
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2013-3-4
结帖率:100%
已结贴  问题点数:20 回复次数:7 
求大神解释,问了同学和老师都没法解释。(谭浩强c第三版上面的一个关于指针的程序)
下面这个程序是按照谭浩强c语言第三版255页原封不动敲出来的,自己感觉也应该没有错误,在VC++6.0上面编译连接没有报错也没有警告,就是在调用函数的时候就弹出运行截止的系统提示。
请问是为什么?
# include <stdio.h>
int main(void)
{
    void copy_string(char *from,char *to);
    char *a="I am a teacher.";
    char *b="You are a student.";
    printf("\nstring a=%s\nstring b=%s",a,b);
    printf("copy string a to b:\n");
    copy_string(a,b);
    printf("\nstring a=%s\nstring b=%s\n",a,b);
    return (0);
}
void copy_string(char *from,char *to)
{
    for(;*from!='\0';from++,to++)
        *to=*from;
    *to='\0';
}
搜索更多相关主题的帖子: teacher include return c语言 
2014-03-28 08:44
ying8501
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:6
帖 子:1092
专家分:1446
注 册:2008-11-24
得分:10 
# include <stdio.h>
int main(void)
{
    void copy_string(char *from,char *to);
    char *a="I am a teacher.";
    char b[30]="You are a student.";    //因为后面要将字符串拷贝到b所指向的地址,所以这里必须要定义成数组,否则会出错。
    printf("\nstring a=%s\nstring b=%s",a,b);
    printf("copy string a to b:\n");
    copy_string(a,b);
    printf("\nstring a=%s\nstring b=%s\n",a,b);
    return (0);
}
void copy_string(char *from,char *to)
{
    for(;*from!='\0';from++,to++)
        *to=*from;
    *to='\0';
}
2014-03-28 08:57
embed_xuel
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:58
帖 子:3845
专家分:11385
注 册:2011-9-13
得分:5 
书上错了
char *a="I am a teacher.";         //a和b这样是指针,指向的是字符串常量
char *b="You are a student.";
应该改为:
char a[]="I am a teacher.";        //a和b这样是字符数组,分配到栈上的变量
char b[]="You are a student.";

总有那身价贱的人给作业贴回复完整的代码
2014-03-28 08:59
porywei
Rank: 2
等 级:论坛游民
帖 子:36
专家分:73
注 册:2014-3-6
得分:0 
指针变量不可以使用赋值运算符,除非先给他分配内存;谭浩强经常被人黑还是有原因的。。

程序员没有女朋友
2014-03-28 09:16
porywei
Rank: 2
等 级:论坛游民
帖 子:36
专家分:73
注 册:2014-3-6
得分:0 
上面的说错了,指针字符没有指向内存空间,不可以直接复制或者使用scanf输入

程序员没有女朋友
2014-03-28 09:21
embed_xuel
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:58
帖 子:3845
专家分:11385
注 册:2011-9-13
得分:0 
以下是引用porywei在2014-3-28 09:21:50的发言:

上面的说错了,指针字符没有指向内存空间,不可以直接复制或者使用scanf输入

说的什么?

总有那身价贱的人给作业贴回复完整的代码
2014-03-28 09:29
张炎逸
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2013-3-4
得分:0 
回复 5楼 porywei
意思就是char *to指向*b,但是系统并没有给*b赋予内存?所以不能运行?

有些事,不必说的太清楚。
2014-03-28 09:41
wsj3000
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:78
专家分:161
注 册:2009-8-4
得分:5 
回复 2楼 ying8501
对的,最好是数组。

是这样的,在一个linux程序里,指令代码都是只读的,分配在.text,向 "hello,world."这种字符串都是存储在.text区域的,是自读的,在C语言中它的类型是:const char *,一个指向只读字符串的指针。所以,它可以赋值给char * b, 但是却不能往里面copy东西。

再说数组,数组是在调用函数的时候分配在栈空间里面的,可读可写。
char b[] = "hello,world.";
这里是说,建立大小为sizeof("hello,world.")的数组,并赋值"hello,world."。
2014-03-28 10:08



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-429271-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.138570 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved