strlen()在非空终止的char字符串上?

s不是以null结尾时,是否定义了strlen(const char *s) ,如果是,那么它返回什么?

不,它没有定义。 它可能导致内存访问冲突,因为它将一直计数,直到它到达值为0的第一个内存字节。

从C99标准:

strlen函数返回终止空字符前面的字符数。

如果没有空字符,则表示结果未定义。

可能你需要strnlen ?

不是真的,它会导致坏事 。

如果您的字符串未终止NUL,该函数将一直保持查找状态。

如果运气好,这会导致程序崩溃。

如果你不幸运,你会得到比预期更大的长度,其中包含许多“意外”值。

它将返回在找到’\ 0’之前遇到的字符数。

它没有定义。 它会导致未定义的行为,这意味着任何事情都可能发生,很可能你的程序会崩溃。

strlen()只对以null结尾的字符串起作用(做一些有用的事情); 如果您传递的不是其他任何内容,您将获得完全未定义的结果。 如果你很幸运,它不会导致崩溃:)

男人3 strcspn

size_t strcspn(const char * s,const char * reject);

一段冒号分隔的字符串:

 size_t len = strcspn(str, ":"); 

逗号分隔字符串的长度:

 size_t len = strcspn(str, ","); 

制表符分隔字符串的长度:

 size_t len = strcspn(str, "\t"); 

它总是被定义。

它将返回“字符串”的长度,直到它到达一个空值为止的字节。 不好主意,因为这会导致缓冲区溢出。