gpt4 book ai didi

c - C 中的缓冲区大小

转载 作者:太空狗 更新时间:2023-10-29 16:00:01 27 4
gpt4 key购买 nike

当在 C 中提供缓冲区大小时,我如何知道还剩多少以及何时需要停止使用内存?

比如我写的函数是这样的:

void ascii_morse (lookuptable *table, char* morse, char* ascii, int morse_size) {

}

在此应用程序中,我将收到一个字符串 (ascii),我将使用其他函数将其转换为莫尔斯码,以将每个 ascii 字符转换为莫尔斯码。我面临的问题是如何确保我没有超过缓冲区大小。我什至不知道何时使用缓冲区大小或每次使用时如何减小它。

当然输出将是莫尔斯码(所以我将向莫尔斯码添加字符串,但我想我知道该怎么做,只是缓冲区大小对我来说很难理解)

如果您需要更多信息来理解问题,请告诉我,我已尽力解释。

最佳答案

听起来好像对“缓冲区”有些混淆。没有缓冲区。 morse-size 告诉您分配给 morse 的内存量(从技术上讲,是 morse 指向的内存块)。如果 morse-size 是 20 那么你有 20 个字节。这是 19 字节的可用空间,因为字符串以空字节结尾。您可以将 morse-size 视为“字符串的最大长度加一”。

您需要检查 morse-size 以确保您没有向 morse 中写入超过其容量的字节。 morse 只不过是指向内存中一个点的数字。不是一个范围,而是一个点。分配给 morse 的是在那之后。如果您在 morse 中输入的内容不止于此,您就有可能覆盖其他人的内存。 C 不会为你检查这个,这是最高性能的代价。

这就像你去剧院,引座员告诉你,“你可以坐 A3 和下一个 5”,然后就离开了。你要有礼貌,不要坐6个座位,别人给了A8。

valgrind 等工具对于发现 C 语言中的内存错误和保持理智来说非常宝贵。

C 中的字符串不是很糟糕吗?欢迎来到整个计算世界中错误的最大根源。

关于c - C 中的缓冲区大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1759960/

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