gpt4 book ai didi

c - 检查 char* 指针是否为空终止字符串的便携方法

转载 作者:太空狗 更新时间:2023-10-29 14:52:23 25 4
gpt4 key购买 nike

我有一个接受 char* 指针的 C 函数。该函数的前提条件之一是指针参数是一个以 null 结尾的字符串

void foo(char *str) {
int length = strlen(str);
// ...
}

如果 str 不是指向空终止字符串的指针,则 strlen 会崩溃。是否有一种可移植的方法来确保 char* 指针确实指向以 null 结尾的字符串?

我正在考虑使用 VirtualQuery 来查找 str 之后不可读的最低地址,如果我们没有看到 开头之间的空终止符>str 和那个地址,那么 str 不指向一个以 null 结尾的字符串。

最佳答案

不,没有可移植的方法来做到这一点。一个以 null 结尾的字符串可以是任意长的(最多 SIZE_MAX 字节)——不是 null 的 char 数组也是如此。终止。采用 char* 参数的函数无法知道它指向的有效内存块(如果有的话)有多大。检查必须遍历内存直到找到空字符,这意味着如果数组中没有空字符,它将越过它的末尾,导致未定义的行为。

这就是为什么将字符串指针作为参数的标准 C 库函数具有未定义的参数行为不指向字符串的原因。 (检查 NULL 指针会很容易,但这只会捕获一个错误案例,代价是对有效参数的执行速度变慢。)

编辑:回应您的问题标题:

Portable way to check if a char* pointer is a null-terminated string

指针不能是字符串。它可能是也可能不是指向字符串的指针。

关于c - 检查 char* 指针是否为空终止字符串的便携方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28165464/

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