从固定闪存位置访问C字符串

从固定闪存位置访问C字符串,c,string,C,String,我已在位置0xAABB处定义了一个字符串: const char str[] = "Hi There"; const word _Str1 @0xAABB = (word)str; 现在,我想访问位于0xAABB的字符串。 这个的C语法是什么 只需使用指向内存位置的指针: 常量字符*str=(常量字符*)0xAABB; 编辑:(根据您的评论)您需要首先从位置0xAABB获取地址,然后使用此值作为字符串的地址: const char *str = *(const char **)0xAAB

我已在位置0xAABB处定义了一个字符串:

const char str[] = "Hi There";  
const word _Str1 @0xAABB = (word)str;
现在,我想访问位于0xAABB的字符串。 这个的C语法是什么

只需使用指向内存位置的指针: 常量字符*str=(常量字符*)0xAABB;
编辑:(根据您的评论)您需要首先从位置0xAABB获取地址,然后使用此值作为字符串的地址:

const char *str = *(const char **)0xAABB;
这将取消对0xAABB处指针的引用,以获取实际字符串地址

#define ADDRESS_OF_YOUR_STRING  ((const char *)0xAABB)

const char *pointer_to_your_string = (const char *)0xAABB;
我本可以在指针定义中使用宏,但这些实际上是如何实现这一点的单独演示。如果将宏版本放入头文件并在代码中使用,编译器将能够更好地进行优化。如果您使用一个全局指针变量来访问它,那么最终编译器可能需要额外加载一个指针

使用这两种方法是相同的:

printf("%s\n", ADDRESS_OF_YOUR_STRING);

应该可以正常工作,因为printf需要一个指向字符串的指针,用于
%s

什么目标处理器和编译器?以防有人想知道这是一个8位von Neumann体系结构处理器。我想知道这是不是哈佛的建筑。它打印了一些垃圾值。在0xAABB,会有一些地址,比如0xAB。因此,实际字符串位于此处,如上面定义中的sen.const char*str=*(const char**)0xAABB;>>编译器错误:初始值设定项必须是常量const char*str=const char**)0xAABB;:不起作用。要添加到这里,0xAABB处的地址是16位,从调试器看来,它只接受8位地址,因此是垃圾值string@Punit:要解决该错误,只需将初始化移到声明后的单独一行,即
const char*str;str=*(常量字符**)0xAABB它说,类型与以前的初始化不兼容。可能是我的编译器太笨了。