[英]Why can I read a dereferenced pointer, but can't write it in C, but can in C++?
[英]how to write an address (pointer) in a text file that can be read and dereferenced in C
我想在一个文本文件中写一个地址,可以通过fscanf
读取并在读取指针后由C取消引用。 如何在文件中写入地址?
编辑:我不是故意粗鲁,但我知道这正是我所需要的,所以如果有人可以请你只是列出答案,而不是为什么我不应该这样做的道德原因,这将是伟大的!
进一步编辑:啊,我不清楚我想做什么。 在emacs中,我想(用我的手指!!)写一个C程序可以使用fscanf读取的地址并用作指针。 我如何(用我的手指!!)在emacs中写一个地址。 例如,如果我想让C读入0x11111111
,我试图在emacs中写入0x11111111
,但是当我读取它时它不会成为C中的正确地址。
fprintf(file, "%p", pointer);
应该做的工作; 但如果您阅读该文件,该地址是否有用是值得怀疑的......
也许对于某些硬件寄存器/ IO端口或共享内存,这可能很有趣,但在一般情况下:不要使用它。 Segfault,无意义数据或数据损坏将成为结果......
[添加]
fscanf(... "%x" ...)
应读取十六进制编码的整数,即地址。
你不能这样做。 当再次读入指针时,无法保证指针有效 - 如果它被另一个进程读取,它几乎肯定不会。 如果它被同一个进程读取,为什么首先将它写入文件?
我没有看到问题,这里是使用字符串而不是文件的代码段:
#include <stdio.h>
int main() {
void *p1,*p2;
p1 = (void*)0x12FE0FE0A;
char str[] = "12FE0FE0A";
sscanf(str, "%p", &p2);
printf("%p %p\n",p1,p2);
}
指针是相同的。
顺便说一句,如果你写“0x12345678”,格式字符串应为"0x%p"
以正确处理“0x”前缀。
这样的事可能吗?
#include<stdio.h>
int main()
{
FILE *out = fopen("test.out","w");
int i = 6;
int *pi = &i;
fprintf(out, "%d", pi);
fclose(out);
printf("pi points to an int that has the value of %d\n", *pi);
FILE *in = fopen("test.out","r");
fscanf(in, "%d", &pi);
fclose(in);
printf("After reading the value of pi from the file, it points to an int that has the value of %d\n", *pi);
}
如果您只想阅读该值,那么您应该关注以下内容:
int *pi;
fscanf(in, "%d", &pi);
// use *pi to dereference normally
编辑进一步编辑 :尝试使用"%x"
读取十六进制数字。
您可以为指针类型指定一个整数值,以便使用类型转换,例如
unsigned char *vram = (unsigned char *)0xA0000000;
需要注意的是,结果是实现定义的(未定义,请注意),甚至可能无法使用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.