gpt4 book ai didi

c - 程序没有输出(预计 3 行),没有编译或运行时错误

转载 作者:行者123 更新时间:2023-11-30 15:39:16 27 4
gpt4 key购买 nike

该程序可在此处获取:http://ideone.com/P1c15J

这里简要介绍一下它的作用:

声明一个字符串ptr。将此指针地址转换为小端地址并将这些字节存储在 char[] adr 中。打印出来。

然后将字符串 ptradr 连接成 badcode,打印 badcode

如果去掉最后两行(连接并打印错误代码),该程序实际上可以工作。有预期的输出。

由于某种原因,当我尝试连接并打印字符串时,没有编译错误,没有运行时错误,但也没有输出。

编辑:我知道我期望的输出会出现乱码,因为 adr 中包含的字节不会映射到 ASCII 字符。目前这对我来说不是问题。我对获取字符串中的地址字节感兴趣。

#include <stdio.h>
#include <stdint.h>
#include <string.h>

int main(void) {
size_t i;

char badcode[500];

char const *ptr = "This string's little endian memory address is: ";

char adr[sizeof(void *) + 1];
uintptr_t ptrAddress = (uintptr_t)ptr;

printf("Pointer address is %p\n", ptr);
printf("Converting to 0x");
for(i = 0; i < sizeof(void *); ++i)
{
adr[i] = ptrAddress & 0xff;
printf("%2.2X", (unsigned int)(unsigned char)adr[i]);
ptrAddress >>= 8;
}
printf("\n");

snprintf(badcode, sizeof badcode, "%s%s", ptr, adr);

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

return 0;
}

最佳答案

尝试打印未终止的字符串 adr

snprintf(badcode, sizeof badcode, "%s%s", ptr, adr);

按照@adr的建议,在printf()之前添加

adr[sizeof(void*)]=0;

OR(假设 sizeof(void*) 为 4)

snprintf(badcode, sizeof badcode, "%s%hh02X%hh02X%hh02X%hh02X", 
ptr, adr[0], adr[1], adr[2], adr[3]);
<小时/>

OP预计adr[4]包含类似“\x12\x34\x56\x78”的内容,但是 a[5]包含类似于 '\x12' , '\x34 , '\x56 , '\x78 , junk 。由于最后一个字节未知是 '\0' ,UB结果。使用时snprintf(..., "%s", adr)adr需要是'\0'终止。

关于c - 程序没有输出(预计 3 行),没有编译或运行时错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21515975/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com