免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: flw
打印 上一主题 下一主题

【原创】超强版 Trim 横空出世! [复制链接]

论坛徽章:
0
61 [报告]
发表于 2004-05-27 10:19 |只看该作者

【原创】超强版 Trim 横空出世!

原帖由 "db_info" 发表:
我用
char *tmp="     hello     ";
trim(tmp);
程序Segmentation fault

这是你的问题,常量怎么可以trim?

论坛徽章:
0
62 [报告]
发表于 2004-05-27 10:52 |只看该作者

【原创】超强版 Trim 横空出世!

char *tmp=" hello ";
这是定义字符型指针变量并初始化,怎么是常量呢?

论坛徽章:
0
63 [报告]
发表于 2004-05-27 11:37 |只看该作者

【原创】超强版 Trim 横空出世!

你指针指向的地址是在只读空间

论坛徽章:
0
64 [报告]
发表于 2004-05-27 11:55 |只看该作者

【原创】超强版 Trim 横空出世!

原帖由 "hanni" 发表:
char *tmp=" hello ";
这是定义字符型指针变量并初始化,怎么是常量呢?

请首先弄明白什么是字符型指针赋值与字符型指针内容初始化.
char szTmp[20] = " hello "; 就可以trim.
char *tmp = " hello"; 则是把tmp 的值赋为常量指针" hello " 的首地址.
不可以trim.

论坛徽章:
0
65 [报告]
发表于 2004-05-27 15:33 |只看该作者

【原创】超强版 Trim 横空出世!

原帖由 "windflowers1976" 发表:
hello "; 就可以trim.
char *tmp = " hello"; 则是把tmp 的值赋为常量指针" hello " 的首地址.
不可以trim.

您的说法我认为有误。

char *tmp = " hello";是用初始化赋值的方法写成这样的.
含义是:把存放该字符串"hello"的字符数组的首地址装入指针变量tmp中.
而不能用常量指针" hello "这样的说法。您说呢?

常量在c语言里,用#define定义,在c++中用const或者define定义。

论坛徽章:
0
66 [报告]
发表于 2004-05-27 15:45 |只看该作者

【原创】超强版 Trim 横空出世!

windflowers1976  说的很清楚了,
你char *tmp = " hello"; 是想用tmp来操作常量"hello",

如果想用指针,可以给他分配空间,malloc()后,再memcpy(tmp,"hello",6);这样才可以。

论坛徽章:
0
67 [报告]
发表于 2004-05-27 15:52 |只看该作者

【原创】超强版 Trim 横空出世!

晕哦,跟我争的淅沥哗啦的,呵呵.
K&R C PROGRAMMING LANGUAGE 第二版 英文版
  1. P104
  2. Then the stattement
  3.     pmessages = "now is the time";
  4. assigned to pmessages a pointer to the character array.This is not a string copy; only pointers are involved.
复制代码

麻烦你也去翻C语言的书,好不好?
const 修饰才叫常量吗?
呵呵.
打住.

论坛徽章:
0
68 [报告]
发表于 2004-05-27 16:09 |只看该作者

【原创】超强版 Trim 横空出世!

但是有可能在进行指针操作的时候,对"hello"进行篡改,而这种情况往往是无法预见的哦!c语言就是太灵活了,还是要强定义的好,要不然有c就可以,用不着推c++....等等.

论坛徽章:
0
69 [报告]
发表于 2004-05-27 16:31 |只看该作者

【原创】超强版 Trim 横空出世!

原帖由 "windflowers1976" 发表:
hello "; 就可以trim.
char *tmp = " hello"; 则是把tmp 的值赋为常量指针" hello " 的首地址.
不可以trim.

说明有误,难怪会引起hanni的误解了。把上面的“常量指针”改为“常量字符串”就可以了。

原帖由 "hanni" 发表:

char *tmp = " hello";是用初始化赋值的方法写成这样的.
含义是:把存放该字符串"hello"的字符数组的首地址装入指针变量tmp中 .

正确的说法是“把存放该字符串"hello"的首地址装入指针变量tmp中. ”,"hello"这个字符串并没有放到一个字符数组中(你没有定义,哪来的字符数组?),它是一个常量(字符型),一般不能对它进行修改操作。

>;>; 但是有可能在进行指针操作的时候,对"hello"进行篡改,而这种情况往往是无法预见的哦!
那是因为 char *tmp = " hello";这样的定义不是太确切,应该这样定义:const char *tmp = " hello";就可避免你说的通过 tmp指针对字符串修改的情况。如果想通过指针变量对字符串进行修改:1. 在字符数组中存储字符串(不能用字符串常量);2.  指针变量不能声明为const 指针。

论坛徽章:
0
70 [报告]
发表于 2004-06-14 09:08 |只看该作者

【原创】超强版 Trim 横空出世!

原帖由 "whyglinux" 发表:

char *tmp = " hello";这样的定义不是太确切


char *tmp = "hello",
把一个const赋为一个非const
奇怪的是编译器居然连个warning都没有
各位好兄弟能给个解释么?不解啊!(我用的是gcc 3.2)
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP