前言
今天做笔试题的时候,有一个很简短的代码,看似简单,实则到处都是坑。
于是我在笔试后就在编译器上跑了一遍,验证了我的想法。
题目
A、hello,word
B、Hello,word
C、%s
D、没有输出
我相信有很多小伙伴会选 A吧!
运行结果
DEVC++
Linux gcc
原因
运行结果会出现断错误,原因在于, char *str=“Hello world” 这句仅仅声明了一个指针变量,指向字符串"Hello world",而"Hello world"这个字符串程序没有给它分配空间,编译器把它分配到常量区.而常量字符串的值是不允许被修改的 ,所以会出现断错误.
正确代码
只需将指针变量str改为指针变量即可:
运行结果
数组可以的原因
原因在于,str[ ]=“Hello world"是你自己定义了一个长度为12 的字符数组,所以对字符串"Hello world” 编译器会给数组在栈中分配内存空间,并将字符串存入数组的空间中,所以你能修改它的值。