| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 496 人关注过本帖
标题:关于输出字符串的问题
只看楼主 加入收藏
zcc12342234
Rank: 1
等 级:新手上路
帖 子:8
专家分:7
注 册:2012-8-8
结帖率:0
收藏
已结贴  问题点数:20 回复次数:9 
关于输出字符串的问题

char * p = "Hello";
等价于以下代码:

char * p;

char string[] = "Hello";

p = string;

如查要输出字符串的内容,有两种方式:

1、按每个字符输出
#include<stdio.h>

int main(void)
{
       char *p="hello";
       while(*p!='\0')
             printf("%c",*p++);
       system("pause");//用于程序编译成exe后,运行exe时暂停dos窗口。
}

2、以字符串形式直接输出
#include<stdio.h>

void main()
{
       char *p="hello";
     
             printf("%s",p);//指针指向的是字符串"Hello"的首地址,系统会自动移动字符串指针,直到遇上'\0',这就是字符串可以以printf("%s",p);输出的原因
       system("pause");
}

问题:::【这里printf("%s",p)等价于 while (*p!=\0) printf("%c", *p++)这是c本身规定的吗?为什么pintf("%s", *p);输出不了呢?是因为无法确定p所指向的空间长度的问题吗?】
搜索更多相关主题的帖子: void include system 字符串 
2012-08-22 00:21
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:3 
char * p = "Hello";
等价于以下代码:

char * p;

char string[] = "Hello";

p = string;

要睡觉了后面没看 开头就错了

这两个p 一个指向了一个不可变的字符串 一个指向了一个可变的字符串 怎么等价的???
2012-08-22 00:23
遗矢的老人
Rank: 9Rank: 9Rank: 9
来 自:成都
等 级:蜘蛛侠
威 望:7
帖 子:325
专家分:1131
注 册:2012-7-20
收藏
得分:3 
兄弟:朝鲜卫星就是由于段错误才掉下来的,段错误是很可怕的哦!学下内存问题吧

[ 本帖最后由 遗矢的老人 于 2012-8-22 00:39 编辑 ]
2012-08-22 00:38
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:3 
第一个不等价。等价应该是说在语义和行为上都等同才行吧,第二个至少创建了一个 string 数组,第一个就没这个功效。另外语义上也不相等。
这可以说这两种情况,只有些微弱的关系。另外二楼正解,也值得楼主参考。

第二个问题,等价其实也不是太说得过去。但如果执行效果相同,就凑合算等价吧。1至少有一个副作用是把 p 后移了很远,而 2 不会。
所以显然这也不是 c 规定的,我觉得可能只是写书人想让你体会循环的一些简单用法而已。
另外 pintf("%s", *p); 相当于 pintf("%s", 'h'); 而 'h' 语义上,是 h 的 ascii 码。这给 printf 转过去,它拿那个数当地址使了,肯定不行呀。
2012-08-22 01:11
pauljames
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:千里冰封
威 望:9
帖 子:1555
专家分:10000
注 册:2011-5-8
收藏
得分:3 
char * p;

char string[] = "Hello";

前者申请了一个指针的大小空间,后面申请了6个字符的空间,不可能划等号的

经常不在线不能及时回复短消息,如有c/单片机/运动控制/数据采集等方面的项目难题可加qq1921826084。
2012-08-22 08:19
admin_xyz
Rank: 2
等 级:论坛游民
帖 子:195
专家分:77
注 册:2012-6-24
收藏
得分:3 
程序代码:
#include <stdio.h>
int main()
{
    char *str = "I am xyz";

    printf ("%s",str);          //为什么pintf("%s", *p);输出不了呢?  答: *str是 "I am xyz"的首字符。 'I'.   

    return 0;
}


总有人比你努力,可怕的是比你牛的人比你还努力。
2012-08-22 10:32
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:3 
明白啦?

授人以渔,不授人以鱼。
2012-08-22 12:28
lz1091914999
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:四川
等 级:贵宾
威 望:37
帖 子:2011
专家分:5959
注 册:2010-11-1
收藏
得分:3 
回复 3楼 遗矢的老人
真的是这样?

My life is brilliant
2012-08-22 12:30
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
我记得貌似有个美国卫星是因为程序写的不对导致失败的
2012-08-22 12:33
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:0 
以下是引用zklhp在2012-8-22 12:33:23的发言:

我记得貌似有个美国卫星是因为程序写的不对导致失败的

我感觉也听说过这个事。《C陷阱与缺陷》还是什么的名书里好像有提过。
2012-08-22 22:50
快速回复:关于输出字符串的问题
数据加载中...
 
   



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

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