Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
889 views
in Technique[技术] by (71.8m points)

c - Access violation when using strcpy?

I've tried reinventing the strcpy C function, but when I try to run it I get this error:

Unhandled exception at 0x00411506 in brainf%ck.exe: 0xC0000005: Access violation writing location 0x00415760.

The error occurs in the *dest = *src; line. Here's the code:

char* strcpy(char* dest, const char* src) {
    char* dest2 = dest;
    while (*src) {
        *dest = *src;
        src++;
        dest++;
    }
    *dest = '';
    return dest2;
}

EDIT: Wow, that was fast. Here's the calling code (strcpy is defined in mystring.c):

#include "mystring.h"
#include <stdio.h>

int main() {
    char* s = "hello";
    char* t = "abc";
    printf("%s", strcpy(s, t));
    getchar();
    return 0;
}
See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)
char* s = "hello";
char* t = "abc";
printf("%s", strcpy(s, t));

The compiler placed your destination buffer, s, in read-only memory since it is a constant.

char s[5];
char* t = "abc";
printf("%s", strcpy(s, t));

Should fix this problem. This allocates the destination array on the stack, which is writable.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...