如何解决如何在地址上修改值
这是一个有关C语言中的指针和解引用的非常基本的问题,但这是可行的。我有以下内容:
char str2[] = "Word2";
printf("String2: %s | Location: %p\n",str2,str2);
unsigned long add_str2 = (long) &str2;
printf("Address of str2 starts at: 0x%lx\n",add_str2);
此后,我可以确认add_str2
具有正确的内存地址:
String2: Word2 | Location: 0x7ffc623b8102 Address of str2 starts at: 0x7ffc623b8102
如何使用add_str2
将W
修改为L
。我尝试过的是:
* add_str2 = 'L';
0_main.c:46:5:错误:一元“ *”的类型参数无效(具有“ long unsigned int”)
正确的方法是什么?并且有没有办法在没有指针类型的情况下修改内存地址的值,还是需要显式指针还是强制转换的指针,例如* (char *) add_str2 = 'L';
?
解决方法
要修改内存地址中的值,您需要使用C语言的指针。
unsigned long add_str2
不是指针,因此不能这样使用。
将数字投射到指针是一个雷区,因为一些系统对不同的整数和指针使用不同的大小。例如,我目前正在使用使用6个字节宽度的指针的目标系统。
不惜一切代价避免将数字转换为指针或指针。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。