size_t strlen(char const* str);
也正因为 strlen 是一个函数,所以需要进行一次函数调用,调用示例如下面的代码所示:char sArr[] = "ILOVEC"; /*用strlen()求长度*/ printf("sArr的长度=%d\n", strlen(sArr));很显然,上面示例代码的运行结果为 6(因为不包括结束字符 null)。这里需要特别注意的是,函数 strlen 返回的是一个类型为 size_t 的值,从而有可能让程序导致意想不到的结果,如下面的示例代码所示:
/*判断一*/ if(strlen(x)>= strlen(y)) { } /*判断二*/ if(strlen(x)- strlen(y)>= 0) { }从表面上看,上面的两个判断表达式完全相等,但实际情况并非如此。其中,判断表达式一没什么问题,程序也能够完全按照预想的那样工作;但判断表达式二的结果就不一样了,它将永远是真,这是为什么呢?
/*判断一*/ if(strlen(x)>= 5) { } /*判断二*/ if(strlen(x)- 5>=0) { }很显然,判断表达式二的结果还是永远是真,其原因与上面相同。
char sArr[] = "ILOVEC"; /*用sizeof求长度*/ printf("sArr的长度=%d\n", sizeof(sArr));相对于函数 strlen,这里的示例代码运行结果为 7(因为它包括结束字符 null)。同时,对 sizeof 而言,因为缓冲区已经用已知字符串进行了初始化,其长度是固定的,所以 sizeof 在编译时计算缓冲区的长度。也正是由于在编译时计算,因此 sizeof 不能用来返回动态分配的内存空间的大小。
本文链接:http://task.lmcjl.com/news/16389.html