常量字符串的问题

 

常量字符串与存放在栈中的字符串C语言面试中经常出现的问题,这可以考察面试者对于C语言数据存储的理解。
我们通过几个例题来看看常量字符串与存放在栈中的字符串

下面的程序有错误吗?为什么? 
void test1()
{
  char* str="hello word!";
  str[0] = 'H';
        printf(str) ;
}
有错误,因为"hello word!",是一个常量字符串,存放于只读的段中,是不可被修改的!向只读数据段写入数据会产生段错误,那么,我们怎么让这个程序合法呢?
void test1()
{
  char str[]="hello word!";
  str[0] = 'H';
        printf(str) ;
}
这样,程序会为str分配地址,str指向的是栈中合法的地址,字符串存放于栈中,是可以被更改的

原文地址:https://www.cnblogs.com/xiayong123/p/3717256.html