| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1562 人关注过本帖
标题:字符串指针问题
取消只看楼主 加入收藏
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
结帖率:99.34%
收藏
已结贴  问题点数:20 回复次数:10 
字符串指针问题
RT
#include <stdio.h>

int main(void)
{
    char *s1, *s2;
    int i = 0;

        s1 = "I love china!";
        s2 = "I love beijing!"; // s1 s2 都获得了地址吗?
        while (*(s1 + i) != '\0')
        {
            *(s2 + i) = *(s1 + i);
            i++;
        }
         *(s2 + i) = '\0';
         for (i = 0; *(s2 + i) != '\0'; i++)
        printf("%c", *(s2 + i));
         printf("\n");
    return  0;
}
程序编译 连接都可以 为什么运行不了,
如果把指针换成数组,实行数组初始化就可以,这是为什么,数组首地址不就是指针吗?
搜索更多相关主题的帖子: beijing include return 字符串 china 
2012-01-02 21:54
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
回复 2楼 liao06550107
定义了指针,然后给指针以字符串首地址,那么*(s + i)及后面的操作为什么不成立。非把定义指针换成数组初始化才可以?

梅尚程荀
马谭杨奚







                                                       
2012-01-02 22:17
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
你只要告诉我,下面这些语句在干什么,说出来自己就知道到底哪出了问题:
*(s2 + i) = *(s1 + i);
*(s2 + i) = '\0';

我的想法是指针指向字符串的首地址然后,+i使他逐个指向后续字符,并通过*(s2 + i) = *(s1 + i);将s1的字符替换s2相应位置的字符,最后赋结束符。
一开始我认为这是合理的,后来去调试了下,到这个语句出现
图片附件: 游客没有浏览图片的权限,请 登录注册
后就无法往下走了,难道是s1 + 1无法指向后续字符?

梅尚程荀
马谭杨奚







                                                       
2012-01-03 14:46
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
回复 9楼 TonyDeng
你这么一说我就明白了。也就是说在数组初始化时比如 char s1[100] = "*****"; 是分配了100可以改变值的变量存储位置。而 char *s1 = "*****"; 是分配了一段不可改变值的常量区,并把首地址送给这个指针。
如果我上面理解的没错,那么 char *s1;这个指针貌似没多大的作用,反而乱用会影响程序的功能?

梅尚程荀
马谭杨奚







                                                       
2012-01-03 14:58
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
回复 10楼 TonyDeng
数据被强奸? 嘎嘎

梅尚程荀
马谭杨奚







                                                       
2012-01-03 14:59
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
回复 13楼 embed_xuel
嗯 现在懂点了。 你说的和5楼解释的一样,不过当时没懂静态常量区的具体含义。

梅尚程荀
马谭杨奚







                                                       
2012-01-03 15:03
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
回复 15楼 TonyDeng
谢谢你说的这么清晰!

不过我还有点问题。
char s1[100] = "*****";
是把"*****"常量数据抄写到s1中去。注意:是“抄写”,不是什么指针赋值。抄完之后各归各。
1.按这样说 char s1[100] = "******";一个语句是不是就在内存里划分了两个存储区?
2.按常理指针都是到处指啊指的,那么一个不自由的指针即指针常量他的用处是什么,是不是程序中应当尽量避免它出现?

梅尚程荀
马谭杨奚







                                                       
2012-01-03 15:18
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
回复 17楼 TonyDeng
非常感谢你的讲解.

梅尚程荀
马谭杨奚







                                                       
2012-01-03 17:19
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
谢谢大家这么热心,

梅尚程荀
马谭杨奚







                                                       
2012-01-03 17:19
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
哇,多前的贴,被顶到这里来了?

梅尚程荀
马谭杨奚







                                                       
2012-03-01 18:16
快速回复:字符串指针问题
数据加载中...
 
   



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

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