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

时间:2009-03-10 17:49:44

标签: c

strlen(const char *s)未以空终止时定义s,如果是,它会返回什么内容?

10 个答案:

答案 0 :(得分:34)

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

答案 1 :(得分:9)

来自C99标准:

  

strlen 函数返回   在...之前的字符数   终止空字符。

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

答案 2 :(得分:5)

您可能需要strnlen吗?

答案 3 :(得分:2)

不是,它会导致bad things

答案 4 :(得分:2)

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

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

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

答案 5 :(得分:1)

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

答案 6 :(得分:1)

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

答案 7 :(得分:0)

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

答案 8 :(得分:-1)

man 3 strcspn

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

A length of colon delimited strings:

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

A length of comma delimited strings:

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

A length of tab delimited strings:

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

答案 9 :(得分:-2)

始终定义。

它将返回“string”的长度,直到它到达一个带有null的字节。不好主意,因为这会导致缓冲区溢出。