我无法在C中编辑内存地址

问题描述 投票:0回答:1

我真的不知道该如何表达标题,我想要从另一个重叠的指针中编辑一个指针中的字符串。

我想在此代码中获得的是1abcd abcd,但获得的却是123 abcd

#include <stdio.h>

int main() {

    char* x = (char*)malloc(4);
    x = "123";
    char*  y = (char*) x+1;
    y = "abcd";
    printf("%s %s",x,y);

}
c string pointers
1个回答
0
投票

问题是您分配给y,然后又分配给y

char *y = x+1;  // first assignment
y = "abcd";              // second assignment

y = "abcd";不是副本。它为const char[5]字符串abcdy分配了一个指针。

这里有类似问题。

char *x = malloc(4);
x = "123";

x首先从malloc分配给存储器,但随后被const char[4] 123覆盖。 malloc内存泄漏。

如果要复制到x指向的存储器中,则需要使用strcpy。但是,x只有4个字节。您将需要更多。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main() {
    // Allocate memory
    char *x = malloc(6);

    // Copy "123" the heap memory pointed to by x.
    strcpy(x, "123");

    // Assign a pointer to x+1 to y.
    char *y = x+1;

    // Copy "abcd" to the heap memory pointed to by y.
    strcpy(y, "abcd");

    // x='1abcd' y='abcd'
    printf("x='%s' y='%s'\n",x,y);
}

注意,当源字符串和目标字符串的长度未知时,strcpy不能安全使用。

© www.soinside.com 2019 - 2024. All rights reserved.