| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 359 人关注过本帖
标题:字符串处理问题
只看楼主 加入收藏
BSMGood
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2013-1-16
结帖率:0
收藏
已结贴  问题点数:20 回复次数:5 
字符串处理问题
/*
    从指定的字符串中查找ch字符,返回第一次出现的位置
*/
const char *my_strchr(char const *str, const char ch)
{
    assert(str);
    for(; *str != '\0'; str ++)
    {
        if(*str == ch)
        {
            return str;    //返回的是ch所在的地址
        }
    }
    return NULL;    //没有找到字符
}

如上是字符串中查找指定字符的函数,实际应用时发现如下现象:

int main(void)
{
    char *string1 = "hello world !";
    char *string2 = "a warm welcome !";
    char a = 'o';
/*
    char *e = "efg";
    e = str();
    printf("%s\r\n", e);    //打印出来的是abc而不是efg
*/

/*
    运行结果:*addr:111(十进制), 'o'(字符型)
               addr:4337716    addr指向的地址,也就是函数返回的地址
              &addr:1244984    addr本身的地址,也就是指针变量addr的地址
    说明:addr指向的地址中的数据是正确的,指向的内容为正要查找的字符
*/   
#if 1
    printf("\r\n string1 address %p \r\n", string1);
    const char *addr = my_strchr(string1, a);
    printf("\r\n string1 address %p \r\n", my_strchr(string1, a));
    printf("\r\n string1 address %p \r\n", addr);
    printf("\r\n string1 address %p \r\n", string1);        //字符串常量地址是不会更改的。
}


如下是执行结果
 string1 address 00424158

 my_strchr return  address 0042415C

 addr address 0042415C

 string1 address 00424158
Press any key to continue
我的问题是函数已经对string1的指针做了更改,并且更改的值作为函数的返回地址,为什么最后一行打印出来的地址还是未变,而不是函数返回的地址,异或变量addr的地址??

搜索更多相关主题的帖子: welcome 实际应用 return 
2013-03-04 10:23
embed_xuel
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:58
帖 子:3845
专家分:11385
注 册:2011-9-13
收藏
得分:5 
说啥呢,没看懂

总有那身价贱的人给作业贴回复完整的代码
2013-03-04 10:55
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:5 
好乱

DO IT YOURSELF !
2013-03-04 11:06
BSMGood
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2013-1-16
收藏
得分:0 
上面最后的是运行结果啊,我没有截屏,直接给拷贝粘贴上去。我是想问函数返回的地址为什么没有对原来引用的形参string1做出改变?我以为string1指向的地址会与函数返回的地址一致的,但是实际运行时发现指向的还是源字符串的首地址。
2013-03-04 13:39
梦幻乐园
Rank: 2
等 级:论坛游民
帖 子:62
专家分:87
注 册:2012-10-25
收藏
得分:5 
在string1中,没有找到a,返回的是NULL,所以,sddr的地址变了,但是,你又没对string1进行操作,他的地址应该不变
2013-03-04 14:46
tompobing
Rank: 8Rank: 8
等 级:蝙蝠侠
帖 子:260
专家分:809
注 册:2012-12-9
收藏
得分:5 
什么意思
2013-03-11 21:10
快速回复:字符串处理问题
数据加载中...
 
   



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

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