检查 const char * 是否以零结尾

标签 c char

我正在一个图书馆工作。 我有一个 const char * ,它应该作为输入以零终止,但由于某种原因它并不总是以零终止。

只要不是零终止的未定义行为被调用 - 有时也会崩溃。

尽管这是输入错误的问题 - 我不想崩溃,所以:

我的问题:有什么方法可以知道 const char * 是否以零结尾?或非零终止? (我没有得到 const char * 的长度作为输入)。

附注好吧,我发现有一种方法可以知道它何时不是零终止 -> 我崩溃了:-) 我想在崩溃之前弄清楚这一点:)

最佳答案

空终止字符串的全部目的是将 \0 作为最后一个字符,以标记字符串的结尾,从而有办法确定字符的结尾数组。

如果您不知道字符串的长度,并且字符串内容中没有任何内容可以确定其长度(例如 \0 等终止符),那么您可以如果没有读取分配的内存的风险,就不能访问它。

访问分配的内存块之外的数据是 C 中未定义的行为,您无法采取任何措施来防止可能的崩溃。如果您的库的函数被记录为采用以 null 结尾的字符串作为输入,用户有责任为您提供正确的输入,否则如果您崩溃,则不是您的错。

请注意,作为引用,所有正确的 C 字符串都应该是一个以 null 结尾的字符数组,并且所有标准字符串操作函数都在 string.h 中定义(strcpystrcmp 等)如果使用除正确的空终止字符串之外的任何内容调用,也会以相同的方式运行。

关于检查 const char * 是否以零结尾,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34880972/

相关文章:

c中的命令行解释器

c++ - 在 SPOJ INCSEQ 中获取 WA - 增加子序列

Java:如何从 System.in.read 中排除回车/换行

c++ - 为什么 C 字 rune 字是 int 而不是 char?

c++ - O2 和 O3 优化的 FP 代码之间的行为截然不同

c - 如何将产品行迭代到 C 中的列

c - 在 C 中读取文件 - 范围和上下文问题

c - 选择性删除字符串中的特定字符

c++如何运行其内容存储在char数组中的.exe文件?

java - 从扫描仪获取字符输入