linux 下运行c出现段错误!!

#include<stdio.h>#include<string.h>voidreverse(char*ch);intmain(void){char*c="hello";... #include <stdio.h>
#include <string.h>

void reverse(char * ch);

int main(void) {
char * c = "hello";
printf("before reverse:\n %s \n",c);
reverse(c);
printf("after reverse:\n %s \n",c);

return 0;
}

void reverse(char * a)
{
int len = strlen(a);
int i;
char ctemp;
for (i = 0; i < len / 2; i++)
{
ctemp = a[i];
a[i] = a[len - i -1];
a[len -i -1] = ctemp;
// a[len - i - 1] ^= a[i];
// a[i] ^= a[len - i - 1];
// a[len - i - 1] ^= a[i];
}

}
用gdb调试的时候,发现问题出现在这一行: a[i] = a[len - i -1];
应该是访问了一段未分配的内存,但是我在windows的cygwin下运行是正常的额,本人之前是做java开发的,最近几天刚学c,哪位兄台帮忙指点一下,谢谢~~~
多谢各位的回答,以下是我的理解:
char * c = "hello";这个是告诉编译器,请求开辟一段空间放指针c,指向字符串常量“hello”,此时“hello”位于常量区,因而不能修改,而c的值就是‘h’的地址。
char s[] = "hellp";这个是告诉编译器,请求开辟一段空间放字符数组s,并把字符串常量“hello”的值拷贝到字符数组中,此时该数组的值是可以修改的,但是修改的并不是原来的字符串常量“hello”。
难怪我运行完之后过几秒360就报告说我的程序是木马,不过为什么cygwin下能正常运行,还是没完全明白~~
展开
 我来答
谋先小铺
2011-10-13 · TA获得超过825个赞
知道小有建树答主
回答量:211
采纳率:0%
帮助的人:51.6万
展开全部
我猜想错误的原因是:
char * c = "hello";//该c是一个指针,指向“hello”
reverse(c);
函数
void reverse(char * a)
{
int len = strlen(a);//该strlen函数是计算a的长度,以'\n'为结束,所以len可能不是5;
更多追问追答
追问
c语言的字符数组会以'\0'作为结束符,只是在那一段内存的末尾做一个标志吧,不会计算到字符数组的长度里的,所以strlen(a)返回的是5.关键是我的在xp的sygwin下运行的正常,到fedora14 下运行就段错误,纠结啊~~
追答
char *p = "hello"

char *p等价于const char *p,定义的是指向const char类型的指针,也就是说P所指向的内容是只读的,所以你不能用p[0] = ’H’企图对P所指向的字符串重新赋值

这种定义由右向左读,首先P是一个指针,其次是一个指向char的 指针,然后const修饰char,所以char是只读的,好理解吧

char * const p 这个就是指向char的const指针,P一旦赋值将不能再让P指向其他,但是P所指向的内容是可写的

我这里做了测试:
char cStr[] = "hello";
char *c = cStr;
这样就不会出现内存错误了
杀鬼
2011-10-13 · TA获得超过357个赞
知道小有建树答主
回答量:331
采纳率:0%
帮助的人:275万
展开全部
改吧,char *c="hello"--->char c[]="hello"
前者你是不能修改hello的值的,因为hello是常量c只是指向这段内存
而后者确是一个字符数组c里面保存的是"hello"
两都的区别能分出来吧。。。
更多追问追答
追问
多谢~~可是上面这段程序在cygwin下可以正常编译和运行啊,这是怎么回事呢
追答
cygwin是模拟环境吧,可能 具体我也没用cygwin但是linux上应该是不行的,你cygwin是在windows上运行 的吧
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
fanmin861128
2011-10-13
知道答主
回答量:25
采纳率:0%
帮助的人:14.4万
展开全部
地址是无法完成内容互换的。
追问
a[i] = a[len - i -1];此时a[i]和a[len -i -1]都是char的值啊,不是指针~~
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式