gpt4 book ai didi

c - 处理导致段错误的空字符串输入

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

我正在将消息结构的内容编码到缓冲区中。

int encode(const struct message *msg, unsigned char *buffer, size_t max_size)
{
if (buffer == NULL)
return -1;

unsigned char *buf_pos = buffer;
unsigned char *ep = buffer + max_size;

if (buf_pos + 1 <= ep) {
*buf_pos++ = SYNC_WORD_1;
} else {
return buf_pos - buffer;
}
.
.
.
}

当我调用 encode(&message, "", 1024); 时,我遇到了预期的段错误。我的理解是,段错误是由于试图访问未分配给程序的内存而引起的,因为 "" 将仅包含空终止符,我正在传递它来代替指针。

我遇到的问题是当我尝试处理这个错误时。我还没有找到一种方法来识别无效输入,该输入既不会导致对有效输入的误报,也不会导致其他段错误。

那么剔除这种输入的正确方法是什么?

最佳答案

这是不可能的。

你基本上是在问“给定一个指针,我怎样才能确保那里有 n 个字节的可写空间?”这是 C 无法帮助您解决的问题。

从根本上说,因为指针只是地址,所以没有与每个指针值相关联的那种额外的元信息。

您可以检查指针是否为 NULL,但这基本上是您可以确定的唯一指针值无效。不可移植(尤其是在嵌入式目标上)您可以变得聪明并检查指针是否在各种已知的不可写区域中,但这仍然非常粗糙。

关于c - 处理导致段错误的空字符串输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43395572/

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