gpt4 book ai didi

c - Printf - 消除垃圾

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

我正在实现一个环形缓冲区。但是当我使用 printf 时,在我想要的之后出现了很多垃圾:

    char *dados1 = "XXXX";
char *dados2 = "YYYY";
char target_1[4];
char target_2[1];
RingBuffer *Buffer_em_Anel = RingBuffer_create(10);

RingBuffer_write(Buffer_em_Anel, dados1, 4);
RingBuffer_read(Buffer_em_Anel, target_1, 4);
printf("actual buffer %s \n", Buffer_em_Anel->buffer);
printf("Characters from read%s \n", target_1);//<---XXXX+lots_of_junk

在调试信息中,一切看起来都很好。

enter image description here

最佳答案

您正在打印的缓冲区仅包含 4 个字符 X

当您使用 %s 说明符时,printf 将继续打印所有字符,直到遇到 NUL 终止符 (\0)。

您不知道 \0 会出现在内存中的什么位置,因此 printf 将继续打印,可能远远超出您的 4 个字节,直到它随机遇到 \0.

要只打印 4 个字符,我会尝试:

printf("actual buffer %.4s \n", Buffer_em_Anel->buffer);  // Note the 4 for width-specifier.
printf("Characters from read%.4s \n", target_1);

关于c - Printf - 消除垃圾,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31478807/

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