簡體   English   中英

如何將內存地址轉換為字符字符串

[英]How to convert a memory address into a char string

我想將內存段的地址轉換為字符字符串。

下面是一個代碼示例:

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

int main(void) {

    int size = 20;
    char buffer[10];
    char *ptr = (char*) malloc(size);
    printf("Ptr addr: %p\n", ptr);
    if(ptr != NULL)
    {
        snprintf(buffer, "%p", ptr);
        printf("Ptr addr stored in buffer: %p\n", buffer);
    }
    return EXIT_SUCCESS;
}

輸出:

指針地址:0x55ab2a43e260

Ptr addr 存儲在緩沖區中:0x7ffe9a76470e

不幸的是,當我使用示例代碼中的方法時,我有兩個不同的地址。 請有人告訴我我做錯了什么嗎?

最好的問候,烏薩姆

此代碼打印buffer地址,而不是其中的內容:

printf("Ptr addr stored in buffer: %p\n", buffer);

你可能想要

printf("Ptr addr stored in buffer: %s\n", buffer);

鑒於之前的代碼使用ptr內容的字符串表示填充了buffer

正如評論中所述,您對snprintf()調用不正確。 它應該是

    snprintf(buffer, sizeof(buffer), "%p", (void *) ptr);

注意轉換為(void *) - %p格式說明符需要一個void *指針。

buffer可能還需要超過 10 個字節,具體取決於您的系統。

代碼中有兩個錯誤

1) 錯誤的 snprint - 您錯過了第二個參數,即緩沖區的大小。

snprintf(buffer, sizeof(buffer), "%p", ptr);

2) 打印緩沖區的格式錯誤 - 字符串應該是 %s

printf("Ptr addr stored in buffer: %s\n", buffer);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM