我正在将消息结构的内容编码到缓冲区中。
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/