gpt4 book ai didi

c - printf 打印超过数组的大小

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

所以,我正在重写 tar 提取命令,我偶然发现了一个奇怪的问题:

简而言之,我分配了一个包含多个字符数组的 HEADER 结构,比方说:

struct HEADER {
char foo[42];
char bar[12];
}

当我 fprintf foo 时,我得到一个 3 个字符长的字符串,这没问题,因为第四个字符是 '\0'。但是当我打印 bar 时,我打印了 25 个字符。

如何只获取bar的12个字符?

编辑 数组不是空终止的事实是“正常的”并且无法更改,否则我不会遇到这么多麻烦。我想要做的是解析数组的第 x 个字符,比如

char res[13];
magicScanf(res, 12, bar);
res[12] = '\0'

编辑 事实证明字符串已经以 null 结尾。我认为不是,因为这是我的错误最合乎逻辑的可能性。由于这是另一个问题,我会接受与所描述问题相匹配的答案。如果有人知道为什么 sprintf 可以打印 25 个字符,包括 2\0,我会很高兴。

最佳答案

您可以通过包含精度来打印不带 NUL 终止符的字符串:

printf ("%.25s", s);

或者,如果您的精度在编译时未知:

printf ("%.*s", length, s);

关于c - printf 打印超过数组的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43834205/

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