⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 subject_55134.htm

📁 vc
💻 HTM
字号:
<p>
序号:55134 发表者:tjligang1234 发表日期:2003-10-07 00:22:33
<br>主题:C指针方面: 是否可以修改指针所指向的字符串中的单个字符?
<br>内容:程序如下: <BR>main() <BR>{ <BR>char s[] = &#34;abcd&#34;; <BR>char *t = &#34;1234&#34;; <BR><BR>s[3] = 'a'; <BR>*(t + 3) = 'a'; <BR><BR>printf(&#34;s is %s&#34;, s); <BR>printf(&#34;t is %s&#34;, t); <BR><BR>return 0; <BR>} <BR>我用redhat Linux 9 中的gcc编译时没有报错, 运行out文件时报&#34;段错误&#34;,程序终止. <BR>将*(t + 3) = 'a';注释掉后, 程序正常运行. <BR>我查了一下&lt;C程序设计&gt;第88页, 写到:对于指针指向的字符串,&#34;如果试图修改字符串的内容, 结果将不确定&#34;. 我的理解是: 指针指向的字符串类似一个常量, 你可以修改指针,让它指向不同的字符串, 但不可以修改字符串的内容. <BR>如果是这样, 对于strcpy()这样的函数用指针应该怎么实现? <BR>程序如下: <BR>#include &lt;stdio.h&gt; <BR><BR>void strcpy(char *, char *); <BR><BR>main() <BR>{ <BR>char *s = &#34;abcd&#34;; <BR>char *t = &#34;1234&#34;; <BR><BR>strcpy(s, t); <BR><BR>printf(&#34;s is %s&#34;, s); <BR>printf(&#34;t is %t&#34;, 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 = &#34;1234&#34;;表示怀疑<BR>普通写法是<BR>int len = strlen(&#34;1234&#34;);<BR>char* t = new char[len + 1];<BR>strcpy(t, &#34;1234&#34;);
<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 = &#34;1234&#34;;&nbsp;&nbsp; //t为字符串常量,即此时t指向常量区,而*(t + 3) = 'a'; 则想要修改常量区,所以出错。<BR><BR>下面的错误也是一样的道理:<BR>char *s = &#34;abcd&#34;; <BR>char *t = &#34;1234&#34;; <BR>strcpy(s, t);&nbsp;&nbsp; //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 + -