在谭浩强的那本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';语句时,是修改内存常量存储区域的操作。
----------------解决方案--------------------------------------------------------
抗议雨中飞燕!!说话吞吞吐吐!!不解释明白,装酷吗??????
----------------解决方案--------------------------------------------------------
----------------解决方案--------------------------------------------------------