繁体   English   中英

如何在可以在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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM