来自内存地址的 char*

发布于 2024-12-02 10:09:13 字数 154 浏览 1 评论 0原文

假设某个内存位置 0xF0000 包含四个字符串 "four"

那么这是有效的:

char *mem = (char*) 0xF0000;

然后是 mem[0] == 'f' 吗?

Suppose some memory location 0xF0000 contains four character string "four" .

so is this valid:

char *mem = (char*) 0xF0000;

and then is mem[0] == 'f' ?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

送舟行 2024-12-09 10:09:13

是的,如果 0xF0000 是四个字符串“four”的起始地址,则有效

Yes it is valid if 0xF0000 is the starting address of the four character string "four"

蹲墙角沉默 2024-12-09 10:09:13

当然是。如果内存映射了正确的权限(写入),那么它对操作系统应该没有任何影响。

测试这一点的一个简单方法是使用 gdb。您可以在指令尝试更改 mem 的值之前中断并更改它,使其指向某个内存。

特别是,不要尝试修改字符串文字 (char *readonly = "mystr");

Sure it is. If the memory is mapped with the correct permissions (write) it should make no difference whatsoever to the operating system.

An easy way to test this is using gdb. You can break and change the value of mem an make it point to some memory, right before an instruction tries to change it.

In particular, don't try to modify a string literal (char *readonly = "mystr");

羁〃客ぐ 2024-12-09 10:09:13

是的。如果您使用 malloc 或在堆栈上分配它,那么它应该按预期运行。如果您刚刚选择了该地址,请注意,通常它可能随时被其他内容覆盖。

Yes it is. If you used malloc, or allocated it on the stack, then it should behave as expected. If you just picked that address, be aware that in general it may be overwritten by other things at any time.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文