计数字符串长度c

时间:2013-05-28 13:49:09

标签: c string null

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 个答案:

答案 0 :(得分:2)

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

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

strlen出了什么问题?

答案 1 :(得分:0)

您可以使用此代替。它更简单

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

您可以使用#include <string.h>

中的预定义函数strlen()

答案 2 :(得分:0)

尽可能贴近原始代码

  • 此功能从0-up ...而不是200-down计算。
  • 此函数在找到字符串终结符时结束,而不是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;
}

答案 3 :(得分:0)

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

而是从索引0开始,然后继续前进。

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