【发布时间】:2021-12-24 01:16:16
【问题描述】:
例如,给定一个指向"there is so \0ma\0ny \0 \\0 in t\0his stri\0ng !\0\0\0\0" 中第一个字符的char *p,
Strrchr() 如何找到最后一次出现的空字符?
出现以下问题:
=>停止循环取决于什么条件!
=>我认为在所有情况下它都会尝试访问下一个内存区域以检查其状况?有时会绕过字符串边界,UB!安全吗!
如果我错了,请随时纠正我!
【问题讨论】:
-
最后一个只能是第一个 - 否则你无法知道字符串“结束”的位置。你可以一直找零,直到内存用完。
-
根据定义,字符串是包含终止空字符的字符序列。如果要查找字符数组中最后一个空字符,则必须知道数组的大小。
-
如果您只有
char *p指向第一个字符,那么它不仅不是“简单的问题”,而且完全不可能。没有任何信息可以告诉您原始字符串有多长。一个\0与另一个终止字符串一样好,因此一旦找到一个,您就无法知道它不是真实的。出于所有意图和目的,字符串以第一个\0结尾。 -
为了实现
strrchr,请执行以下操作:找到 first 空字符,即字符串的结尾。然后从那里返回,直到找到字符或者您位于字符串的开头。这是 4-5 行 C 代码。 -
更高效的版本会记住搜索字符最近出现的位置,并且只需要遍历字符串一次。还是只有几行。
标签: c pointers segmentation-fault null-character