我想在一个文本文件中写一个地址,该文件可以由fscanf
读取,并在读取指针后由C取消引用。如何在文件中写入地址?
修改 我不是故意粗鲁,但我知道这正是我所需要的,所以如果有人可以请你只是列出答案,而不是为什么我不应该这样做的道德原因,那就太棒了! / p>
进一步修改
啊,我不清楚自己想做什么。在emacs中,我想(用我的手指!!)写一个C程序可以使用fscanf读取的地址并用作指针。我如何(用我的手指!!)在emacs中写一个地址。例如,如果我希望C在0x11111111
中读取,我正在尝试在emacs中编写0x11111111
,但在我阅读它时它并没有成为C中的正确地址。
答案 0 :(得分:8)
fprintf(file, "%p", pointer);
应该做的工作;但如果您阅读文件,那么地址是否有用是值得怀疑的......
对于某些硬件寄存器/ IO端口或共享内存,这可能很有趣,但在一般情况下:不要使用它。 Segfault,无意义数据或数据损坏将成为结果......
[加入]
fscanf(... "%x" ...)
应读取十六进制编码的整数,即.k.a。地址。
答案 1 :(得分:6)
你不能这样做。当再次读入指针时,无法保证指针有效 - 如果它被另一个进程读取,它几乎肯定不会。如果它是由同一个进程读取的,为什么首先将它写入文件?
答案 2 :(得分:4)
我没有看到问题,这里是使用字符串而不是文件的片段:
#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”前缀。
答案 3 :(得分:3)
这样的事可能吗?
#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"
读取十六进制数字。
答案 4 :(得分:1)
您可以为指针类型指定一个整数值,以便使用类型转换,例如
unsigned char *vram = (unsigned char *)0xA0000000;
需要注意的是,结果是实现定义的(未定义,请注意),甚至可能无法使用。