📄 subject_55134.htm
字号:
<p>
序号:55134 发表者:tjligang1234 发表日期:2003-10-07 00:22:33
<br>主题:C指针方面: 是否可以修改指针所指向的字符串中的单个字符?
<br>内容:程序如下: <BR>main() <BR>{ <BR>char s[] = "abcd"; <BR>char *t = "1234"; <BR><BR>s[3] = 'a'; <BR>*(t + 3) = 'a'; <BR><BR>printf("s is %s", s); <BR>printf("t is %s", t); <BR><BR>return 0; <BR>} <BR>我用redhat Linux 9 中的gcc编译时没有报错, 运行out文件时报"段错误",程序终止. <BR>将*(t + 3) = 'a';注释掉后, 程序正常运行. <BR>我查了一下<C程序设计>第88页, 写到:对于指针指向的字符串,"如果试图修改字符串的内容, 结果将不确定". 我的理解是: 指针指向的字符串类似一个常量, 你可以修改指针,让它指向不同的字符串, 但不可以修改字符串的内容. <BR>如果是这样, 对于strcpy()这样的函数用指针应该怎么实现? <BR>程序如下: <BR>#include <stdio.h> <BR><BR>void strcpy(char *, char *); <BR><BR>main() <BR>{ <BR>char *s = "abcd"; <BR>char *t = "1234"; <BR><BR>strcpy(s, t); <BR><BR>printf("s is %s", s); <BR>printf("t is %t", t); <BR><BR>return 0; <BR>} <BR><BR>void strcpy(char *s, char *t) <BR>{ <BR>while (*s++ = *t++) <BR>; <BR>} <BR>这段程序遇到同样问题: 指针指向的字符串在子函数中无法被符值. 将s和t改为字符串数组后, 程序正常. 可是你怎么能保证用户传递的参数不是字符串指针呢?<BR>
<br><a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p>
<hr size=1>
<blockquote><p>
回复者:水番 回复日期:2003-10-07 08:53:38
<br>内容:不是很清楚,不过对<BR>char* t = "1234";表示怀疑<BR>普通写法是<BR>int len = strlen("1234");<BR>char* t = new char[len + 1];<BR>strcpy(t, "1234");
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
<font color=red>答案被接受</font><br>回复者:tjhe 回复日期:2003-10-07 09:27:21
<br>内容:char *t = "1234"; //t为字符串常量,即此时t指向常量区,而*(t + 3) = 'a'; 则想要修改常量区,所以出错。<BR><BR>下面的错误也是一样的道理:<BR>char *s = "abcd"; <BR>char *t = "1234"; <BR>strcpy(s, t); //s指向常量区,将s改成数组变量即可<BR><BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:tjligang1234 回复日期:2003-10-08 19:05:28
<br>内容:谢谢tjhe. 明白了.
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:王月亮 回复日期:2003-10-08 21:48:51
<br>内容:我在tc下运行了你的程序,结果正确,这是为什么?
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:tjligang1234 回复日期:2003-10-09 03:19:32
<br>内容:tc下面是不检查常量修改的, 可能是早期的编译器不完善.<BR>现在的gcc中, 这种操作就不可以.(这里面具体的原理我说不清楚了, 希望高手指点一下)<BR>我最早接触c的时候, 用的就是tc, 以前认为毫无疑问的操作, 现在就要打个问号, 麻烦呀.
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -