首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

0xC0000005: 写入位置 0x00e95740 时发生访问冲突 请问咋办

2013-03-14 
0xC0000005: 写入位置 0x00e95740 时发生访问冲突 请教咋办?#include string.h#include stdio.hvoid r

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;
}

热点排行