当s
没有以空字符结尾时,strlen(const char *s)
被定义了吗?如果有的话,它返回什么?
当s
没有以空字符结尾时,strlen(const char *s)
被定义了吗?如果有的话,它返回什么?
不,它没有定义。这可能会导致内存访问冲突,因为它将继续计数直到达到第一个值为0的内存字节。
来自C99标准:
strlen函数返回终止空字符之前的字符数。
如果没有空字符,那么结果是未定义的。
它未被定义。这会导致未定义的行为,意味着任何事情都可能发生,最有可能的是您的程序会崩溃。
它将返回在找到'\0'之前遇到的字符数。
strlen() 只能在以 null 结尾的字符串上工作,如果你传入其他类型的字符串,将会得到完全未定义的结果。如果你幸运的话,它不会导致崩溃 :)
man 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");