【发布时间】:2021-09-19 09:50:56
【问题描述】:
我有一个FFFFAAAACCCC0000 的值,我想使用带有空格的printf() 来打印FFFF AAAA CCCC 0000(基本上是每组4 个字符的间距),但我不知道如何操作,也不知道如何使用@987654325 @也不是write()
我的代码(正在进行中):
#include <stdio.h>
#include <unistd.h>
#include <string.h>
void print(char *str)
{
int i;
char a;
i = 0;
while (str[i] != '\0')
{
a = str[i];
write(1, &a, 1);
i++;
}
}
void print_add(void *addr)
{
printf("%016p: ", addr);
}
void print_hex_value(void *addr)
{
printf("%x ", addr);
}
void print_lit_value(char *addr)
{
int i;
i = 0;
while (i < 16)
{
(addr[i] < 32 || addr[i] > 126) ? printf(".") : print(addr[i]);
i++;
}
}
void *ft_print_memory(void *addr, unsigned int size)
{
int i;
i = 0;
while (i < size)
{
char buff[17];
memcpy( buff, &buff[0], 16);
buff[17] = '\0';
print_add(addr + i);
print_hex_value(buff);
print_lit_value(buff);
i += 16;
}
return (addr);
}
int main(void)
{
char *str = "Salut les aminches c'est cool show mem on fait de truc terrible\1\2";
ft_print_memory(str, sizeof(str));
}
目的是打印如下内容:
$> ./ft_print_memory
000000010a161f40: 426f 6e6a 6f75 7220 6c65 7320 616d 696e Bonjour les amin
000000010a161f50: 6368 6573 090a 0963 2020 6573 7420 666f ches...c est fo
000000010a161f60: 7509 746f 7574 0963 6520 7175 206f 6e20 u.tout.ce qu on
000000010a161f70: 7065 7574 2066 6169 7265 2061 7665 6309 peut faire avec.
000000010a161f80: 0a09 7072 696e 745f 6d65 6d6f 7279 0a0a ..print_memory..
000000010a161f90: 0a09 6c6f 6c2e 6c6f 6c0a 2000..lol.lol. .
我在多个部分都遇到了问题,但我决定做一个我想要的通用版本,然后修复所有的废话
【问题讨论】:
-
真的不太清楚你的意思。您只是想在每组 4 个字符之间插入一个空格,还是想在匹配的组之间插入一个空格?
-
@WilliamPursell 在每组 4 个字符之间
-
输入是什么?是字符串还是数字?如果您显示不带空格的打印代码会有所帮助。
-
请提供变量的complete minimal reproducible example,它们的类型以及您当前如何打印它。
-
memcpy( buff, &buff[0], 16);???