| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1104 人关注过本帖
标题:像初学者介绍一个容易犯错的问题
只看楼主 加入收藏
小旭哥
Rank: 2
等 级:论坛游民
帖 子:106
专家分:72
注 册:2012-11-4
结帖率:86.21%
收藏
已结贴  问题点数:20 回复次数:22 
像初学者介绍一个容易犯错的问题
这个问题特别适合于正在学指针和内存管理知识的学生。在介绍这个小问题的时候,可以先在VC上写下如下的源代码:
#include<stdio.h>

int main()
{
     char *p = "Hello word.";
     p[1] = 'L';
     printf( "%s\n", p );

     return 0;
}
这是一个错误的程序。
小问题  高手就不要喷我了 帮下那些初学者了解下新知识。
我在这里就不说这个程序哪里错了,自己去找哪里错了。以及为什么。了解这些,,对你以后编程有很大的作用。
搜索更多相关主题的帖子: 源代码 return 
2012-11-05 21:22
yijingtao
Rank: 2
等 级:论坛游民
帖 子:16
专家分:12
注 册:2012-8-16
收藏
得分:3 
HLllo word

其实没太明白你的意思,你原意是要打印什么?
2012-11-05 22:18
小旭哥
Rank: 2
等 级:论坛游民
帖 子:106
专家分:72
注 册:2012-11-4
收藏
得分:0 
回复 2楼 yijingtao
其实这是一个错误的程序   就是想让新手看看  究竟错在哪里了。。。。
2012-11-05 22:29
yijingtao
Rank: 2
等 级:论坛游民
帖 子:16
专家分:12
注 册:2012-8-16
收藏
得分:0 
回复 3楼 小旭哥
错,是因为有对的标准
  请问,你标准是什么?
  我新手,很迷茫你说的这个错
2012-11-05 23:27
zxd543
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:内蒙古
等 级:贵宾
威 望:17
帖 子:453
专家分:2351
注 册:2012-4-12
收藏
得分:3 
回复 2楼 yijingtao
你运行他的程序了吗?
#include<stdio.h>
int main()
{
     char a[20]="Hello word.";
     char *p = "Hello word.";
     //p[1] = 'L';//这样写是不能运行的 程序会报错的 我记得好像是*p只分配首地址 数组在内存中全部分配
     a[1]='L';
     printf( "%s\n", p );
     printf( "%s\n", a );
     return 0;
}

[ 本帖最后由 zxd543 于 2012-11-6 00:09 编辑 ]

马马虎虎 不吝赐教 我是路过蹭分滴
2012-11-06 00:08
青春无限
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江苏
等 级:贵宾
威 望:24
帖 子:3452
专家分:19340
注 册:2012-3-31
收藏
得分:3 
学习

学 会看代码…学习写程序…学会搞开发…我的目标!呵呵是不是说大话啊!!一切皆可能
2012-11-06 07:36
cnfarer
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:179
帖 子:3330
专家分:21157
注 册:2010-1-19
收藏
得分:3 
这个程序VC6是可以运行的.GCC是报错的.
因此,这跟标准有关,与编译器有关.

★★★★★为人民服务★★★★★
2012-11-06 08:08
StarFall
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:1
帖 子:193
专家分:553
注 册:2012-10-1
收藏
得分:3 
回复 楼主 小旭哥
没报错啊

去追寻更高的技术领域。永不停止。
2012-11-06 09:03
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:3 
VC里面有一个神马神马玩意 所以能正常运行 但这个代码从道理上说应该是错的

char *p = "Hello word.";

这是定义了一个指针 并且把一个静态的字符串的地址赋给这个指针 字符串是静态的 所以不应该被修改 正确的写法应该是

char s[] = "Hello word.";

这样看起来一样 但实际上 这个相当于

char s[12];
strcpy(s, "Hello word.");

也就是说 在这个写法里字符串是在堆栈里面的 自然是可以改的

至于VC里面为啥对 欢迎大家研究研究 我记得windows核心编程里面好像说过跟这个相关的一个东西
2012-11-06 09:09
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
以下是引用zklhp在2012-11-6 09:09:45的发言:

VC里面有一个神马神马玩意 所以能正常运行 但这个代码从道理上说应该是错的

char *p = "Hello word.";

这是定义了一个指针 并且把一个静态的字符串的地址赋给这个指针 字符串是静态的 所以不应该被修改 正确的写法应该是

char s[] = "Hello word.";

这样看起来一样 但实际上 这个相当于

char s[12];
strcpy(s, "Hello word.");

也就是说 在这个写法里字符串是在堆栈里面的 自然是可以改的

至于VC里面为啥对 欢迎大家研究研究 我记得windows核心编程里面好像说过跟这个相关的一个东西

还有 楼主的代码里面有拼写错误 我直接复制过来了
2012-11-06 09:10
快速回复:像初学者介绍一个容易犯错的问题
数据加载中...
 
   



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

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