【发布时间】:2013-05-14 05:27:21
【问题描述】:
我只是在学习 C(在 24 小时内阅读 Sam 的自学 C)。我已经了解了指针和内存分配,但现在我想知道它们在结构中。
我写了下面的小程序来玩,但我不确定它是否可以。使用 gcc 在 Linux 系统上编译,带有 -Wall 标志编译没有任何问题,但我不确定它是否 100% 值得信赖。
可以像我在下面所做的那样更改指针的分配大小,还是我可能踩到相邻的内存?我在结构中做了一些前后变量来尝试检查这一点,但不知道这是否有效以及结构元素是否连续存储在内存中(我猜是这样,因为指向结构的指针可以传递给一个函数和通过指针位置操作的结构)。另外,如何访问指针位置的内容并对其进行迭代,以便确保如果它是连续的,则不会覆盖任何内容?我想我要问的一件事是如何以这种方式调试内存混乱以知道它不会破坏任何东西?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct hello {
char *before;
char *message;
char *after;
};
int main (){
struct hello there= {
"Before",
"Hello",
"After",
};
printf("%ld\n", strlen(there.message));
printf("%s\n", there.message);
printf("%d\n", sizeof(there));
there.message = malloc(20 * sizeof(char));
there.message = "Hello, there!";
printf("%ld\n", strlen(there.message));
printf("%s\n", there.message);
printf("%s %s\n", there.before, there.after);
printf("%d\n", sizeof(there));
return 0;
}
我在想有些不对劲,因为我的there 的大小没有改变.kj
亲切的问候,
【问题讨论】:
-
“在 24 小时内自学 C”... 哦,天哪。 C tag wiki 中有一个书籍清单。帮自己一个忙,远离任何宣传在 X 天/小时/分钟内教你 C 的广告。
-
如果我只能在 24 小时内学会发射火箭!
-
@narnie 请尽情享受学习C的那一刻,无需着急。即使明天晚上世界末日来临,这真的是一段值得珍惜的回忆。
-
@BarathBushan 这是我开始的第二本 C 书。第一个是从新手到专业的 C,但因指针而陷入困境。 Sam 的书帮助澄清了这一点,然后我将回到 Apress 的书。感谢 C 标记 wiki 链接!
-
我正在决定:)