当前位置: 代码迷 >> C语言 >> [讨论]char* a = "abc" 和 char a[] = "abc" 之间的区别 ...
  详细解决方案

[讨论]char* a = "abc" 和 char a[] = "abc" 之间的区别 ...

热度:444   发布时间:2007-09-19 22:28:54.0

在谭浩强的那本C程序设计第2版的236页上的那个程序也不能运行,估计就是这个原因,一运行就出现运用程序错误的提示,我贴上来,不妨大家也试试看能不能运行

#include<stdio.h>
void copy_string(char *from,char *to)
{
for(;*from != '\0';from++,to++)
*to=*from;
*to='\n';
}
int main(void)
{
char *a = "I am a teacher.";
char b[] = "you are a student";
printf("\nstring a=%s\nstring b=%s\n",a,b);
copy_string(b,a);
printf("\nstring a=%s\nstring b=%s\n",a,b);
}


----------------解决方案--------------------------------------------------------

我是这样理解的,既然有char* a = "abc",就说明a是一个指针变量,a是指向字符串"abc"的首地址。既然是一个指针,怎么会有a【1】出现呢,除非定义了一个指针数组,这样才会有a【0】,a【1】。。的出现。


----------------解决方案--------------------------------------------------------
*to='\n'; //改为:*to='\0'


copy_string(b,a);//改为:copy_string(a,b); :)





----------------解决方案--------------------------------------------------------

按楼上改了下,程序运行正常。。。
感觉对c/c++内存分配机制有点迷糊


----------------解决方案--------------------------------------------------------
等待高手


----------------解决方案--------------------------------------------------------

10楼的!怎么看不懂你解释的呢?


----------------解决方案--------------------------------------------------------
char *a; 仅仅定义一个指向字符数据的指针变量,即仅仅分配4字节地址变量空间。而它存储的地址是未知的。
当执行 *(a+1)='k';语句是修改未知内存区域的操作。

----------------解决方案--------------------------------------------------------

27楼(本人)说的不够严谨。

当执行 *(a+1)='k';语句时,是修改内存常量存储区域的操作。


----------------解决方案--------------------------------------------------------

抗议雨中飞燕!!说话吞吞吐吐!!不解释明白,装酷吗??????


----------------解决方案--------------------------------------------------------

----------------解决方案--------------------------------------------------------
  相关解决方案