读书人

0xC0000005: 写入位置 0x00e95740 时发

发布时间: 2013-03-14 10:33:15 作者: rapoo

0xC0000005: 写入位置 0x00e95740 时发生访问冲突 请教咋办?
#include <string.h>
#include <stdio.h>
void reverse_string(char *str){
char *last_char;
for(last_char=str;*last_char!='\0';last_char++)
;
last_char--;
while(str<last_char){
char temp;
temp=*str;
*str++=*last_char;
*last_char--=temp;
}
}
void main(){
char *a="abcde";
reverse_string(a);
while(*a!='\0')
printf("%c",*a);
}
单步调试到*str++=*last_char;弹出0xC0000005: 写入位置 0x00e95740 时发生访问冲突,请教这是怎么回事?
[解决办法]
这样char *a="abcde";定义的话,a是常量指针了:


#include <string.h>
#include <stdio.h>
void reverse_string(char *str){
char *last_char;
for(last_char=str;*last_char!='\0';last_char++)
;
last_char--;
while(str<last_char){
char temp;
temp=*str;
*str++=*last_char;
*last_char--=temp;
}
}
void main(){
char a[]="abcde";
char* b = a;
reverse_string(a);
while(*b!='\0')
printf("%c",*b++);
}

[解决办法]

#include <string.h>
#include <stdio.h>
void reverse_string(char *str){
char *last_char;
for(last_char=str;*last_char!='\0';last_char++);
last_char--;
while(str<last_char){
char temp;
temp=*str;
*str++=*last_char;
*last_char--=temp;
}
}
int main(){
char a[]={'a', 'b', 'c', 'd', 'e', '\0'};
char *pa = a;
reverse_string(pa);
while(*pa!='\0')
printf("%c",*pa++);
printf("\n");
return 0;
}

读书人网 >C语言

热点推荐