如下面两段代码:
char b[ ] = "I am a Chinese";
char * a = "I am a Chinese";
它们分别是用字符数组和字符串指针来定义了字符串常量,一般情况下的使用都是互通的,即可以互换。但是在今天编写字符串翻转问题的代码时,发现了一个他们之间的不同。即用字符串指针定义的字符串位于内存常量区,一般的编译器都是不允许修改它的内容的。所以用char * a = "I am a Chinese";时,行不通。具体代码如下:
char * reverse_str(char * str)
{
if(str != NULL)
{
char * start = str;
char item;
int len = strlen(str);
char * end = start + len - 1;
while (start < end)
{
item = (* start);
(* start) = (* end); //这是对常量区内存的修改语句,所以代码执行到这句会奔溃
(* end) = item; //同上
start++;
end--;
}
return start;
}
else
return 0;
}
而是用字符数组定义的字符常量则运行正常。因为它存放在内存的栈区空间~