gpt4 book ai didi

c - 如何在 C 中使用字符串?

转载 作者:太空宇宙 更新时间:2023-11-04 06:14:25 26 4
gpt4 key购买 nike

我正在努力学习如何编写现代程序。我想将二进制数据存储在字符串中,然后将其输出。为什么?例如,我想将整个文件读入一个字符串,然后将其输出到标准输出。

我该怎么做? printf 和 puts 在第一个\0

之后停止输出数据

我应该用什么来存储文件名以便我可以使用国际字符? wchar_t?

最佳答案

假设您有一个二进制文件。假设你想从中读取 8 个字节文件。

FILE *fp = fopen("a", "rb");

if(fp == NULL)
return;

unsigned char bytes[8];
if(fread(bytes, sizeof bytes / sizeof *bytes, 1, fp) != 1)
{
fprintf(stderr, "could not read 8 bytes\n");
return;
}

// printing the bytes:

for(size_t i = 0; i < sizeof bytes / sizeof *bytes; ++i)
printf("%02X ", bytes[i]);

puts("");

fclose(fp);

我运行这段代码,读取相同代码的编译二进制文件(文件名是 a),前 8 个字节是:

7F 45 4C 46 02 01 01 00

如您所见,有些字节没有表示,如果我要打印作为一个字符串,这将是结果:

帮助不大,在这里我很幸运至少有可打印的整数。

如果你还想打印可打印的字符(比如十六进制编辑器)做):

size_t n;
// yes I swapped the number of items and the number of bytes here
// for reading the whole file
while((n = fread(bytes, 1, sizeof bytes / sizeof *bytes, fp)))
{
size_t i;
for(i = 0; i < n; ++i)
printf("%02X ", bytes[i]);

// if less than array size bytes read, to align output
printf("%*s", (int) ((sizeof bytes / sizeof *bytes) - i)*3, "");
printf("%10s |", "");

for(i = 0; i < n; ++i)
{
if(isprint(bytes[i]))
printf("%c", bytes[i]);
else
printf(".");
}

// same here as above
printf("%*s", (int) ((sizeof bytes / sizeof *bytes) - i), "");
puts("|");
}

这个输出:

7F 45 4C 46 02 01 01 00            |.ELF....|
00 00 00 00 00 00 00 00 |........|
03 00 3E 00 01 00 00 00 |..>.....|
A0 07 00 00 00 00 00 00 |........|
40 00 00 00 00 00 00 00 |@.......|
F0 23 00 00 00 00 00 00 |.#......|
00 00 00 00 40 00 38 00 |....@.8.|
09 00 40 00 23 00 22 00 |..@.#.".|
...
00 6C 69 62 63 2E 73 6F |.libc.so|
2E 36 00 66 6F 70 65 6E |.6.fopen|
00 70 75 74 73 00 5F 5F |.puts.__|
73 74 61 63 6B 5F 63 68 |stack_ch|
6B 5F 66 61 69 6C 00 70 |k_fail.p|
75 74 63 68 61 72 00 70 |utchar.p|
72 69 6E 74 66 00 66 63 |rintf.fc|
6C 6F 73 65 00 5F 5F 63 |lose.__c|
74 79 70 65 5F 62 5F 6C |type_b_l|
...
39 01 00 00 00 00 00 00 |9.......|
00 00 00 00 00 00 00 00 |........|
01 00 00 00 00 00 00 00 |........|
00 00 00 00 00 00 00 00 |........|

关于c - 如何在 C 中使用字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48896082/

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