地址到字符串常量

时间:2011-05-10 21:57:54

标签: c

我从汇编程序到C得到一个字符串,我需要获取该地址的内容。 怎么做? Google使用reinterpret_cast给出C ++示例,但它不适用于C(我想)。 如果您还要注意所需的库,我将不胜感激,tenx

#include <stdio.h> 
#include <stdlib.h> 

unsigned long const1(void); 

int main()
{ 
    printf("Const: %d\n", const1()); 
    return 0; 
}

3 个答案:

答案 0 :(得分:3)

如果您已经获得了地址,并且您知道它是一个以空字符结尾的字符串,那么您需要做的只是将其视为字符串。

printf("%s", (char*)alleged_string_address);

答案 1 :(得分:1)

等待您的信息时的初步答案:

   char* foo = (char*)...pointer from assembly...;
    *foo = 'a'; /* write a to the address pointed at by foo */
    foo++;      /* increment the address of foo by 1 */
    *foo = 'b'; /* write b to that address.  foo now contains ab, if it points at RAM.  */

这个答案适用于嵌入式系统。如果需要指向类似外设寄存器的指针,请使用volatile来避免编译器优化。

   volatile char* foo = (char*)...pointer from assembly...;
    *foo = 'a'; /* write a to the address pointed at by foo */
    foo++;      /* increment the address of foo by 1 */
    *foo = 'b'; /* write b to that address.  foo now contains ab, if it points at RAM.  */

答案 2 :(得分:0)

如果 知道 ,字符串后面会有一个零字节,请尝试以下操作:

char* p = (char*) <your address here>;
// use p for whatever here

如果字符串后面没有零,则C中的标准字符串函数将失败。