-3
int string_length(char str[])
{
int i;
for(i=200; i>=0; i--)
{
  //printf("%c \n",str[200]);
   printf("%d",i);
  if(str[i] !=NULL)
 {
    return(i);
   }
  }
}

如果字符串是 :eee rrr ,我想返回正确的字符串大小:它应该返回 7 但这总是返回 200

4

4 回答 4

2

这是因为您传入的字符串范围之外的数据是随机的,而且大多不是'\0'.

永远不要越界访问数组,它会导致未定义的行为。如果您想制作自己的功能,您需要从头开始。

有什么问题strlen

于 2013-05-28T13:50:46.417 回答
0

尽可能贴近您的原始代码

  • 此函数从 0 向上计数......而不是 200 向下计数。
  • 此函数在找到字符串终止符时结束,而不是 NULL


int string_length(char str[])
{
    int i;
    for(i=0; i<200; ++i)
    {
        printf("[%d] : %c \n", i, str[i]);
        if(str[i] == '\0')
        {
            return(i);
        }
    }
}   

或者,如果你想要一个极简主义的功能:

int string_length(char* s)
{
    return (*s)? string_length(s+1)+1 : 0;
}
于 2013-05-28T13:57:42.910 回答
0

您可以改用这个。它更简单

int string_length(char *str)
{
    int i =0;
    while(*str++) i++;
    return i;
}

strlen()你可以使用预定义的函数#include <string.h>

于 2013-05-28T13:50:36.360 回答
0

为什么从第 200 个字符开始?您无法预先知道该内存地址是否已分配。你冒着程序崩溃的风险。与此相关,您没有检查传递给函数的字符串是否有效(检查它是否具有非空地址)

而是从索引 0 开始,然后一路向上。

在 c/c++ 中,字符串的结尾用 '\0' 字符标记。尝试寻找这个而不是 NULL(除非您已将 NULL 定义为 '\0')

于 2013-05-28T14:01:20.047 回答