| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 448 人关注过本帖
标题:看不懂程序里的一些语句,还请大侠教教。。。。。。
只看楼主 加入收藏
jomwang
Rank: 2
等 级:论坛游民
帖 子:12
专家分:16
注 册:2010-1-28
结帖率:100%
收藏
已结贴  问题点数:10 回复次数:3 
看不懂程序里的一些语句,还请大侠教教。。。。。。
程序代码如下:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
void main()
 {
    char *s1="Hello World!\n",*s2,*t;
    puts(s1);      
    s2=calloc(strlen(s1)+1,sizeof(char)); /*初始化s2,使其指向一块能够容纳所复制字符串的存储空间*/
    t=s2;
    while(*s1!='\0')
        {
            *s2=*s1;
             s1++;
             s2++;
          }
    *s2='\0';        /*复制循环中未复制的字符串结束标志*/
    s2=t;
    puts(s2);
}

首先红字的部分:初始化s2?编译的时候报错:error C2440: '=' : cannot convert from 'void *' to 'char *'
初始化S2是否只有只有这一种方式?
而蓝色的部分,开始其实就是把刚刚初始化后的S2赋给T,后面又把T赋给给S2,那么这时S2不是空的吗?
这个程序是某个例子程序,所以没有考虑它的错误性。呵呵


搜索更多相关主题的帖子: 语句 
2010-02-05 09:46
playmyself
Rank: 5Rank: 5
来 自:第3系4级宇宙空间
等 级:职业侠客
帖 子:76
专家分:399
注 册:2009-7-8
收藏
得分:5 
报错是因为你用C++的方式编译了,请用C语言编译(把文件名的扩展名改成.c)
程序本身没有问题,有另一种初使化方式,如下。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
    char *s1="Hello World!\n",*s2,*t;
    puts(s1);      
    //s2=calloc(strlen(s1)+1,sizeof(char));
    s2 = malloc((strlen(s1)+1)*sizeof(char));    //另一种初使化方式
    t=s2;
    while(*s1!='\0')
        {
            *s2=*s1;
             s1++;
             s2++;
          }
    *s2='\0';        /*复制循环中未复制的字符串结束标志*/
    s2=t;
    puts(s2);
    return 0;
}
赋值只是把右面的值复制到左面,不会变空。

无聊创造奇迹。
2010-02-05 10:12
xinjinlong
Rank: 3Rank: 3
来 自:河南南阳
等 级:论坛游侠
帖 子:61
专家分:117
注 册:2010-1-19
收藏
得分:5 
第一:我用VC6.0试了一下程序时没有错了,完全通过
第二:红色部分就是你开辟空间s2指向首地址
第三:t的目的就是指向开辟的首地址,应为在下面的赋值中s2的地址发生的变化在不断的下移,用t 就是记住开始地址
第四:所有的元素都赋值结束了,用为用的是puts(s2),所有s2必须指向字符串的首地址,所有再让s2指向t现在的位置就是首地址
2010-02-05 10:20
jomwang
Rank: 2
等 级:论坛游民
帖 子:12
专家分:16
注 册:2010-1-28
收藏
得分:0 
谢谢两位大侠了 ,由于只有10分,不要嫌少哈!
我用的是C++编译的,我去试试C语言编译看看先.
第二:红色部分就是你开辟空间s2指向首地址
第三:t的目的就是指向开辟的首地址,应为在下面的赋值中s2的地址发生的变化在不断的下移,用t 就是记住开始地址
第四:所有的元素都赋值结束了,用为用的是puts(s2),所有s2必须指向字符串的首地址,所有再让s2指向t现在的位置就是首地址

学习了,开始我的理解是先把S2的值赋给T了,原来只是赋首地址,呵呵!学习有待加强!

[ 本帖最后由 jomwang 于 2010-2-5 10:38 编辑 ]
2010-02-05 10:34
快速回复:看不懂程序里的一些语句,还请大侠教教。。。。。。
数据加载中...
 
   



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

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