#include <stdio.h>
#include <stdlib.h>
void reverseString( char *str );
int main()
{
char *str = "abcdefg";
reverseString(str);
printf("Reverse Result: %s\n", str);
return 0;
}
void reverseString( char *str2 )
{
char *str = str2;
char *last = str;
while(*last != '\0')
{
last++;
}
last--;
while(str < last)
{
char ch = *str;
*(str++) = *last;
*(last--) = ch;
}
}
above is my program, it is the exercise 2 chapter 6, on the book of pointer on c,i dont understand why it has the following error:
Program received signal SIGSEGV, Segmentation fault.
In ?? () ()
Please help me thanks
换成char str[] = {"abcdefg"};
char *str = "abcdefg";这种赋值编译器做了处理,会当成常量缓冲空间
如下:
char *str = "abcdefg";
char *str1 = "abcdefg";
汇编可以看到指到的地址是一样
K&R的 C程序设计语言(第2版) 书的解释
下面两个定义之间有很大的差别:
char amessage[] = "nw is the time"; /* 定义一个数组 */
char *pmessage = "now is the time"; /* 定义一个指针 */
上述声明中,amessage是一个仅仅足以存放初始化字符串以及空字符'\0'的一维数组。数
组中的单个字符可以进行修改,但amessage始终指向同一个存储位置。另一方面,pmessage
是一个指针,其初值指向一个字符串常量,之后它可以被修改以指向其它地址,但如果试图
修改字符串的内容,结果是没有定义的(参见图5-7)。
非常感谢,已经试过了,可以,又学习了