1

シンプルな strcpy を実装していますが、実行すると常にセグメンテーション エラーが発生します。助けてください!

以下は私のコードです:

#include <stdio.h>

char* mystrcpy(char *dst, char *src){
    char *ptr = dst;
    while (*src !='\0') {
        *dst = *src;
        dst++;
        src++;
    }
    return ptr;
}

int main (int argc, char **argv) {
    char *str1 = "abc";
    char *str2 = "def";
    char *str3 = NULL;
    str3 = mystrcpy(str2, str1);
    printf("str2 now is %s", str2);
    printf("str3 is %s", str3);
    return 0;
}
4

2 に答える 2

9

これらは読み取り専用です。それらに書き込むと、未定義の動作が発生します。

char *str1="abc"; /* Read-only. */
char *str2="def";

while (*src !='\0') {
    *dst = *src; /* Writes into read-only memory. */

このC FAQを参照してください:

文字列定数は実際には定数です。コンパイラはそれらを書き込み不可のストレージに配置する可能性があるため、それらを変更することは安全ではありません。

そして別の説明。試してみてください

char str1[]="abc";
char str2[]="def";
于 2011-07-23T09:27:39.773 に答える
-3

while( *src !='\0'){ *dst=*src;

* ではなく & を使用して、ここでポインターを逆参照する必要があります。

編集:

ここでは、私自身の頭蓋のセグメンテーション障害があるようです-朝が早すぎます!

cnicutar の説明 (で文字列定数にポインターを割り当て、char *str2 = "def";その場所に書き込もうとする) は、はるかにもっともらしいです...

于 2011-07-23T09:23:47.263 に答える