检查const char *是否为零终止

时间:2016-01-19 15:43:46

标签: c char

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

每当它不是零终止时,调用未定义的行为 - 有时也会崩溃。

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

我的问题:有没有办法知道const char *是否零终止?或者不是零终止? (我不会将[{1}}的长度作为输入)。

P.S。好吧,我已经发现有一种方法可以知道它何时不是零终止 - >我崩溃了:-) 我想在崩溃前弄明白:)

1 个答案:

答案 0 :(得分:0)

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

如果您不知道字符串的长度,并且在字符串的内容中没有任何内容来确定其长度(例如终结符字符,例如\0),那么您可以& #39; t访问它而不会冒被读出已分配内存的风险。

在C中访问分配的内存块之外的数据是未定义的行为,并且您无法阻止可能的崩溃。如果您的库函数被记录为以空终止字符串作为输入,用户有责任为您提供正确的输入,如果您崩溃则不是您的错

注意作为参考,所有正确的C字符串应该是以空字符结尾的字符数组,并且string.hstrcpystrcmp等中定义的所有标准字符串操作函数都是如此。如果使用除了正确的以null结尾的字符串之外的任何其他方法调用,它的行为方式将相同。