| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1467 人关注过本帖
标题:字符串赋值问题?
取消只看楼主 加入收藏
genzbw
Rank: 1
等 级:新手上路
帖 子:4
专家分:3
注 册:2013-3-10
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:2 
字符串赋值问题?
求教:
   我定义了一个结构
    typedef struct{
        char * ch;//用来保存字符串
        int length;//字符串的长度
    }S;

    然后定义了一个方法用来给结构赋值
    Status strAssign(S t,char* chars){
        if (t.ch!=NULL) {
            free(t.ch);
            t.ch=NULL;
        }
        int i;
        char *c=chars;
        for (i=0;*c!='\0';++c) {
            ++i;
        }
        if (!i) {
            t.ch=NULL;
            t.length=0;
        }else{
            t.ch=(char*)malloc(i*sizeof(char));
            if (!t.ch) {
                exit(SOVERFLOW);
            }
            for (int j=0; j<i; j++) {
               t.ch[j]=chars[j];
            }

            t.length=i;
        }
        return OK;//ok表示成功
    }

    然后我写了一个测试
    char *a="hello world";
    S str;
    strAssign(str, a);
    这时我发现执行完strAssign后当前的str值仍然为未赋值状态。

    请教高人:
    1.为什么str的值没有被赋值成功?
    2.另外我看到书中对代码中标红的地方 可以写成 t.ch[0..i-1],为什么我这样写编译器会报错,能告知这是什么意思吗?

    谢谢回复!
搜索更多相关主题的帖子: 结构 字符串 
2013-03-11 19:38
genzbw
Rank: 1
等 级:新手上路
帖 子:4
专家分:3
注 册:2013-3-10
收藏
得分:0 
昨天晚上看了一下c语言的书,原来对结构体变量赋值的方法是值传递,所以当该变量进入strAssign方法时,我认为它这个变量会被拷贝一份,然后对该变量赋值,当函数结束时变量被释放了,所以在函数外面的变量没有被赋值,那么如果我在函数中返回函数中操作的变量就会有值。 那么结构体变量在什么时候分配的空间,在函数中是怎么被拷贝的呢?
2013-03-12 11:14
genzbw
Rank: 1
等 级:新手上路
帖 子:4
专家分:3
注 册:2013-3-10
收藏
得分:0 
我的程序确实如楼上所说,会在执行的时候抛出异常,pointer being freed was not allocated,然后给str初始化之后就没有这个问题了。所以我认为是free(t.ch)这个方法导致的。如果变量没有初始化,那么它会导致在申请的空间中有一些地址中的值被使用,那我的方法free(t.ch)就会出问题。

另外: t.ch[0..i-1],在C语言版本的数据结构中出现,请问它是什么意思,网上也没有搜索到?
2013-03-15 11:30
快速回复:字符串赋值问题?
数据加载中...
 
   



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

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