【发布时间】:2018-07-05 04:44:19
【问题描述】:
我搜索了整个 StackOverflow,但找不到我想要做什么。我想将指针项目复制到指针 COPYTO。然后可以调用 COPYTO->x.
#include <stdio.h>
typedef struct JustArray {
char x[30];
} JustArray;
int main()
{
JustArray *Items, *COPYTO;
char d[10] = "Test";
Items = malloc(sizeof(Items));
COPYTO = malloc(sizeof(COPYTO));
strcpy(&Items->x,d);
memmove(©TO, Items, sizeof(JustArray));
printf("Pointer: %p\n", &d);
printf("Address: %u\n",&d);
printf("Value: %s\n", Items->x);
printf("Value: %s\n", COPYTO->x);
return 0;
}
此程序编译但不会运行。它有一个弹出窗口说:访问冲突读取位置0xabababab。
我来自 C#,发现 C 非常难以理解......
【问题讨论】:
-
sizeof(Items)是指针的大小。是的,每行大约有一个错误。 -
启用所有警告并从那里开始。
-
要清楚,
Items = malloc(sizeof(Items));==>Items = malloc(sizeof(*Items)); -
...并且 COPYTO 已经是一个指针,所以它只是 memmove(COPYTO, ..., 不需要 & 那里。同上 strcpy(&Items->x, ..., 因为x 已经是一个指针。
-
好吧...伙计们。我知道我不理解指针和地址的概念。请告诉我我的想法是什么错误以及为什么......请记住,我来自 C#,一切都被简化了......