字符串操作(读写在内存中)的问题?
#include    <stdio.h>  
 void   copy_string(char   *from,char   *to) 
 { 
          for(;*from!= '\0 ';from++,to++) 
                      *to=*from; 
          *to= '\0 '; 
 } 
 int   main(int   argc,char   *argv[]) 
 { 
             char   *str1= "123456789 "; 
             char   *str2= "abcdefg "; 
             copy_string(str2,str1); 
             printf( "%s\n ",str1); 
             return   0; 
 } 
 (1)以上代码在TC2.0下可以正常通过执行,但在VS2005中不能通过.linux下能编译(gcc),但执行提示段错误!如果把char   *str1该为char   str1[]在VS2005和linux下就都正常了!为什么? 
 (2)用char   *str定义的字符串好象不能往里写只能读,而用char   str[]定义的字符串就可以读也可以写.如何来判断一个char指针是用char   *定义的还是用char   []来定义的呢? 
 谢谢了!
------解决方案--------------------char str1[]= "123456789 "; 
 char str2[32]= "abcdefg "; 
 常量字符串不可改写的 
------解决方案--------------------char *str2= "abcdefg "; 
 这个是指向常量的字符串 
 char str2[32]= "abcdefg "; 
 这个是你自己定义的数组,用一个常量字符串初始化了.
------解决方案--------------------  char *str2= "abcdefg "; 
 这个是指向常量的字符串 
 char str2[32]= "abcdefg "; 
 这个是你自己定义的数组,用一个常量字符串初始化了. 
 ---------------------- 
 正解。 
 指针和数组都是都是存放的一个地址,通过函数调用后,从理论上说是一样的,都是一个地址,没法区分。要依赖于编写代码的人和编译器来区分,不过对于编译器的检查,有很多方法可以绕过去。
------解决方案--------------------TC能运行通过的原因是:DOS对内存没有保护。
------解决方案--------------------TC是一个很弱的编译器,里面的很多内存方面的问题都没有检查。你能编译过,不代表执行结果也如你所想,执行结果也如你所想,并不代表每次执行结果都是正确的,说不定下次执行的时候内存就出了问题。VC和GCC都是强编译器。   
 char * 和char []那就是C语言的基本功的问题了。。。 
 前者是放在静态存储区里的,不可更改的,后者则是系统分配的内存,在堆栈里的,是可写的。