相关疑难解决方法(0)

使用std :: cout时如何模拟printf的%p格式?

unsigned char *teta = ....;
...
printf("data at %p\n", teta); // prints 0xXXXXXXXX
Run Code Online (Sandbox Code Playgroud)

如何使用iostreams 打印变量地址?有吗std::??? 功能就像std::hex做这种转换(地址 - >字符串),那么std::cout << std::??? << teta << std::endl会打印那个地址吗?

(没有sprintf的,请;))

c++ gcc iostream

18
推荐指数
1
解决办法
8128
查看次数

%p是否将变量的地址作为指针打印,还是打印出指向的内容?

我现在已经阅读了至少十几篇关于%p的文章,我仍然没有得到明确的答案.我意识到网站上有多个帖子,我读了很多帖子.我甚至读过这篇文章,但它没有充分解释

说我有:

int x = 10;
void *p = &x;
Run Code Online (Sandbox Code Playgroud)

下面的语句是否打印出'p'的地址或'x'的地址?

printf( "Here: %p\n" , p );
Run Code Online (Sandbox Code Playgroud)

我试图获得x到p的地址.


对于某些上下文,我正在迭代堆栈,寻找指向我创建的链表的指针:

void foo(){

    register void* base asm("ebp");
    void* iter = base;

    void* mBase = MAIN_BASE; //global defined as "register void* base asm("ebp")" in main function

    void* start = &head;
    void* fin = &tail + sizeof( tail );

    while( iter != mBase ){

        if( iter >= start && iter <= fin )
            fprintf( stdout, ">>>>%p\n", iter );

        printf("iter: %p\n", iter );
        iter …
Run Code Online (Sandbox Code Playgroud)

c printf pointers

1
推荐指数
1
解决办法
5124
查看次数

测试机器的字节顺序

这是我使用的程序:

int hex = 0x23456789;
char * val = &hex;
printf("%p\n",hex);
printf("%p %p %p %p\n",*val,*(val+1),*(val+2),*(val+3));
Run Code Online (Sandbox Code Playgroud)

这是我的输出:

0x23456789
0xffffff89 0x67 0x45 0x23
Run Code Online (Sandbox Code Playgroud)

我正在使用64位操作系统的64位CPU.这表明我的机器是小端.为什么第一个字节是0xffffff89?为什么ff的?

c endianness

0
推荐指数
1
解决办法
2636
查看次数

转换为int或其他类型的某些内存地址的十六进制值的大小是多少?

例如:

int* x = new int;
int y = reinterpret_cast<int>(x);
Run Code Online (Sandbox Code Playgroud)

y现在保存变量的内存地址的整数值x.变量y大小int.该int大小是否总是足够大,以存储转换为任何类型的转换后的内存地址int

编辑: 或者使用更安全,long int以避免可能的数据丢失?

编辑2:对不起的人,为了使这个问题更容易理解,我想在这里找到的是返回的HEX值的大小作为数字,不是int的大小,也不是指向int的指针的大小,而是普通的十六进制值.我需要用人类可读的符号来获得这个价值.这就是我reinterpret_cast用来将内存HEX值转换为DEC值的原因.但是要安全地存储值,我还需要找出它的变量:int,long - 什么类型足够大?

c++

0
推荐指数
1
解决办法
5931
查看次数

为什么通过使用printf(%x)指针的值不同?

#include <stdio.h>
int main(void)
{
  int *ptr;
  printf("The Hex value of ptr is 0x%x",ptr);
  printf("The pointer value of ptr is %p",ptr);
}
Run Code Online (Sandbox Code Playgroud)

和输出有些不同,我不知道为什么

The Hex value of ptr is 0x24a77950
The pointer value of ptr is 0x7fff24a77950
Run Code Online (Sandbox Code Playgroud)

它显示ptr的值是一个十六进制整数,但是十六进制输出缺少part 7fff

这是printf格式问题还是其他?

c printf pointers

0
推荐指数
1
解决办法
1172
查看次数

如果我们在打印int时使用%p而不是%d会发生什么

有人可以解释第二行的输出吗?

int x=10;
printf("%d\n",x);
printf("%p\n",x);
printf("%p\n",&x);
Run Code Online (Sandbox Code Playgroud)

输出:

10
0000000a
006aff0c
Run Code Online (Sandbox Code Playgroud)

c int pointers

0
推荐指数
1
解决办法
145
查看次数

标签 统计

c ×4

pointers ×3

c++ ×2

printf ×2

endianness ×1

gcc ×1

int ×1

iostream ×1