| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 359 人关注过本帖
标题:字符串处理问题
取消只看楼主 加入收藏
BSMGood
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2013-1-16
结帖率:0
收藏
已结贴  问题点数:20 回复次数:1 
字符串处理问题
/*
    从指定的字符串中查找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
BSMGood
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2013-1-16
收藏
得分:0 
上面最后的是运行结果啊,我没有截屏,直接给拷贝粘贴上去。我是想问函数返回的地址为什么没有对原来引用的形参string1做出改变?我以为string1指向的地址会与函数返回的地址一致的,但是实际运行时发现指向的还是源字符串的首地址。
2013-03-04 13:39
快速回复:字符串处理问题
数据加载中...
 
   



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

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