首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何将新值赋给C中的某些内存位置

如何将新值赋给C中的某些内存位置
EN

Stack Overflow用户
提问于 2015-09-21 05:36:41
回答 2查看 77关注 0票数 -1

我正在尝试访问(char *addr)指向的内存位置,并存储新值(char val)。以下是我尝试做到的方法。

代码语言:javascript
复制
int set_new_val(Cmd *cp, char *arguments) {
  char *addr;
  int val;
  if (!sscanf(arguments, "%x %x",&addr,&val))
  {
    return 0;          
  }
  printf("adr = %x || val = %x\n",addr,val);
  *addr = (char)val;
  printf("adr = %x || val = %x\n",addr,*addr);
  return 1;
}

任何明显(或不明显)的原因,为什么这将不会工作,是值得赞赏的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-09-21 06:10:18

如果char*int的大小相同,您的代码可能会按预期工作,就像在32位模式下一样,但在大多数现代64位环境中并非如此。

在现代操作系统(Windows,Linux,OS/X,iOS,android...)中你将面临的另一个问题是内存保护:你的进程只能写自己的数据。它不能以这种方式将值插入内存中的任何位置。使用适当的执行权限和mmap函数可以实现对任意内存位置的写入,但这似乎远远超出了您当前的技能水平。

票数 1
EN

Stack Overflow用户

发布于 2015-09-21 05:50:26

您需要先为addr分配内存,然后再为其赋值:

代码语言:javascript
复制
addr = malloc(sizeof(val));
*addr = (char)val;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32684559

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档