常量字符串的问题
常量字符串与存放在栈中的字符串是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指向的是栈中合法的地址,字符串存放于栈中,是可以被更改的