首页 新闻 会员 周边 捐助

c error

0
悬赏园豆:10 [已解决问题] 解决于 2013-04-23 11:16

#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

c
tixiangshu的主页 tixiangshu | 初学一级 | 园豆:185
提问于:2013-04-22 18:22
< >
分享
最佳答案
0

换成char str[] = {"abcdefg"};

char *str = "abcdefg";这种赋值编译器做了处理,会当成常量缓冲空间

如下:

char *str = "abcdefg";

char *str1 = "abcdefg";

汇编可以看到指到的地址是一样

收获园豆:10
2012 | 高人七级 |园豆:21645 | 2013-04-23 08:58

K&R的 C程序设计语言(第2版) 书的解释

下面两个定义之间有很大的差别:
char amessage[] = "nw is the time"; /* 定义一个数组 */
char *pmessage = "now is the time"; /* 定义一个指针 */
上述声明中,amessage是一个仅仅足以存放初始化字符串以及空字符'\0'的一维数组。数
组中的单个字符可以进行修改,但amessage始终指向同一个存储位置。另一方面,pmessage
是一个指针,其初值指向一个字符串常量,之后它可以被修改以指向其它地址,但如果试图
修改字符串的内容,结果是没有定义的(参见图5-7)。

2012 | 园豆:21645 (高人七级) | 2013-04-23 09:15

非常感谢,已经试过了,可以,又学习了

tixiangshu | 园豆:185 (初学一级) | 2013-04-23 11:16
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册