如何將地址字串存盤到char *變數或char陣列中?
#include <stdio.h>
int main()
{
int number = 1200;
printf("Address = %p\n", &number);
// char address[30];
return 0;
}
uj5u.com熱心網友回復:
這是一種方法:
#include <stdio.h>
#include <stdlib.h>
int main() {
int number = 1200;
size_t n = 0;
int n2;
char *s = NULL;
retry:
n2 = snprintf(s, n, "Address = %p", &number);
if(n2 < 0) {
printf("snprintf failed\n");
return 1;
}
if(!n) {
n = n2 1;
s = malloc(n);
if(!s) {
printf("malloc failed\n");
return 1;
}
goto retry;
}
printf("%s\n", s);
free(s);
return 0;
}
對我來說,它列印:
Address = 0x7ffea89d5e6c
uj5u.com熱心網友回復:
要將變數的地址轉換為字串,請使用snprintf()with"%p"并將物件地址轉換為void *.
Cast 符合 C 規范。
p 引數應為指向 的指標
void。指標的值以實作定義的方式轉換為列印字符序列。
剩下的唯一棘手的部分是確定合理的大小和管理緩沖區。
我喜歡單次呼叫snprintf(),將大量緩沖區縮放到合理的最壞情況大小。
#include <assert.h>
#include <stddef.h>
#include <stdio.h>
#define PTR_FMT "Address = %p\n"
// How about allowing a charter per pointer bit and a "0x"` to handle %p "implementation-defined manner".
#define PERCENT_P_FMT_SIZE (sizeof(void *) * CHAR_BIT 3)
int main(void) {
int number = 1200;
char buf[sizeof PTR_FMT PERCENT_P_FMT_SIZE];
int len = snprintf(buf, sizeof buf, PTR_FMT, (void *) &number);
assert(len > 0 && (unsigned) len < sizeof buf);
fputs(buf, stdout);
}
uj5u.com熱心網友回復:
根據您的示例(使用本地字符緩沖區)...
#include <stdio.h>
int main() {
int number = 1200;
printf( "Address = %p\n", &number );
char buf[30]; // generous enough?
sprintf( buf, "%p", &number );
printf( "Address = %s\n", buf );
return 0;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/507590.html
上一篇:更改電子表格上的單元格資料
下一篇:更改結構陣列中的物件值的最佳實踐
