我正在一个图书馆工作。 我有一个 const char * ,它应该作为输入以零终止,但由于某种原因它并不总是以零终止。
只要不是零终止的未定义行为被调用 - 有时也会崩溃。
尽管这是输入错误的问题 - 我不想崩溃,所以:
我的问题:有什么方法可以知道 const char *
是否以零结尾?或非零终止? (我没有得到 const char *
的长度作为输入)。
附注好吧,我发现有一种方法可以知道它何时不是零终止 -> 我崩溃了:-) 我想在崩溃之前弄清楚这一点:)
最佳答案
空终止字符串的全部目的是将 \0
作为最后一个字符,以标记字符串的结尾,从而有办法确定字符的结尾数组。
如果您不知道字符串的长度,并且字符串内容中没有任何内容可以确定其长度(例如 \0
等终止符),那么您可以如果没有读取分配的内存的风险,就不能访问它。
访问分配的内存块之外的数据是 C 中未定义的行为,您无法采取任何措施来防止可能的崩溃。如果您的库的函数被记录为采用以 null 结尾的字符串作为输入,用户有责任为您提供正确的输入,否则如果您崩溃,则不是您的错。
请注意,作为引用,所有正确的 C 字符串都应该是一个以 null 结尾的字符数组,并且所有标准字符串操作函数都在 string.h
中定义(strcpy
, strcmp
等)如果使用除正确的空终止字符串之外的任何内容调用,也会以相同的方式运行。
关于检查 const char * 是否以零结尾,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34880972/