| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 863 人关注过本帖
标题:再谈字符串的定义,你有没有这样试过?
只看楼主 加入收藏
herotobe
Rank: 1
等 级:新手上路
威 望:1
帖 子:48
专家分:0
注 册:2006-5-3
收藏
 问题点数:0 回复次数:11 
再谈字符串的定义,你有没有这样试过?

对于用 char *p="China" 这样定义的字符串。教材中说,把字符串常量的首地址赋给p(教材中使用的编译器为Turbo C 2.0).而且我们大多数人认为这样定义后,字符串常量“China"的什不能修改。
那么请大家看下面的程序。

main()
{char *str;
str="thank you";
printf("the address of cosnt \"thank you \" is %p\n",str); /* 输出 字符串常量thank you的地址 */
printf("Enter your string:\n");
scanf("%s",str);
printf(" the address of const %s is %p",str,str);
getch();
}


程序运行结果为:the address of cosnt "thank you is 0840:0094
the address of cosnt " 输入的内容 " is 10840:0094
这不就是说明原来的字符常量thank you被输入的内容覆盖了吗?,因而实现的字符常量的修改。

如果要考察"thank you "是否还在内存中,可以在程序的开始用另一个指针变量p也指向"thank you",在程序的最后输出
p指向的内容,如果p指向的内容仍为"thank you "说明字符串常量"thank you "没有被修改;若p指向的内容为在程序运行时输入的内容说明字符常量"thank you "被修改

main()
{char *str,*p;
p= str="thank you";

printf("the address of cosnt \"thank you \" is %p\n\n\n\n",str); /* 输出 字符串常量thank you的地址 */
printf("Enter your string:\n");
scanf("%s",str);
printf("\n\n\nthe address of const %s is %p\n\n\n",str,str);
printf("*p=%s",p);
getch();
}


本人使用的编译器为MyTC v5.2

[此贴子已经被作者于2006-5-6 14:40:17编辑过]

搜索更多相关主题的帖子: 定义 字符 
2006-05-05 21:26
飞跃无限
Rank: 1
等 级:新手上路
威 望:1
帖 子:180
专家分:0
注 册:2006-4-16
收藏
得分:0 
#include <stdio.h>
void main()
{char *str;
str="thank you";
printf("the address of cosnt \"thank you \" is %p\n",str); /* 输出 字符串常量thank you的地址 */
printf("Enter your string:\n");
scanf("%s",str);
printf(" the address of const %s is %p",str,str);//不是%d而是%p吧??

}
2006-05-05 21:51
论坛
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:1372
专家分:0
注 册:2006-3-27
收藏
得分:0 
scanf("%s",str);
printf(" the address of const %s" is %d",str,str);


你赶快去好好学学电脑应用吧,你如果输入10000个字符,估计你的系统就报废了,this is terrible

日出东方,唯我不败! 做任何东西都是耐得住寂寞,任何一个行业要有十年以上的积累才能成为专家
2006-05-05 21:56
论坛
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:1372
专家分:0
注 册:2006-3-27
收藏
得分:0 
%d也能打印地址

日出东方,唯我不败! 做任何东西都是耐得住寂寞,任何一个行业要有十年以上的积累才能成为专家
2006-05-05 21:57
飞跃无限
Rank: 1
等 级:新手上路
威 望:1
帖 子:180
专家分:0
注 册:2006-4-16
收藏
得分:0 
哦。
2006-05-05 22:12
herotobe
Rank: 1
等 级:新手上路
威 望:1
帖 子:48
专家分:0
注 册:2006-5-3
收藏
得分:0 

不好意思,刚才程序上出了点问题


After all,tomorrow is another day!!!!
2006-05-05 22:21
herotobe
Rank: 1
等 级:新手上路
威 望:1
帖 子:48
专家分:0
注 册:2006-5-3
收藏
得分:0 
非常感谢大家提出宝贵的意见!!!!!!!!!!!!!

After all,tomorrow is another day!!!!
2006-05-05 22:22
xsimon
Rank: 1
等 级:新手上路
帖 子:121
专家分:0
注 册:2006-5-5
收藏
得分:0 
以下是引用论坛在2006-5-5 21:56:00的发言:
scanf("%s",str);
printf(" the address of const %s" is %d",str,str);


你赶快去好好学学电脑应用吧,你如果输入10000个字符,估计你的系统就报废了,this is terrible

能解释一下吗?

2006-05-06 10:19
Knocker
Rank: 8Rank: 8
等 级:贵宾
威 望:47
帖 子:10454
专家分:603
注 册:2004-6-1
收藏
得分:0 
[QUOTE]对于用 char *p="China" 这样定义的字符串。教材中说,把字符串常量的首地址赋给p.而且我们大多数人认为这样定义后,字符串常量“China"的什不能修改。[/QUOTE]
确是如此,如果你用32位的编译器如VC,C-freet等等,“China"是不能被修改的.
但,TC是可以修改“China"的.
TC是DOS时代的东西。DOS始终认为系统只运行一个程序,而这个程序可以使用所有系统资源,包括内存。
Windows是一个多任务的系统,可同时运行多个程序。所以操作系统在内存管理更为严格。

九洲方除百尺冰,映秀又遭蛮牛耕。汽笛嘶鸣国旗半,哀伤尽处是重生。     -老K
治国就是治吏。礼义廉耻,国之四维。四维不张,国之不国。   -毛泽东
2006-05-06 12:41
lj_860603
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:714
专家分:0
注 册:2006-1-25
收藏
得分:0 
的确不能改,因为那已经是静态内存里面的东西了.如你想修改的话,用字符串数组就可以修改.或者用指向指针的指针也可以修改,只是比较难理解.

我的原则很简单:不做不喜欢的事!
2006-05-06 12:46
快速回复:再谈字符串的定义,你有没有这样试过?
数据加载中...
 
   



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

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