在不使用strlen的情况下查找字符串长度并在C中使用函数

时间:2014-03-02 14:47:24

标签: c

我写了这段代码,但它给出了长度为0.我是初学者,也找不到这个有什么问题?这是我的代码:

#include <stdio.h>
#include <conio.h>
int strlgnth(char *s);      /* func prototype */

int strlgnth(char *s)
{
    int i;
    {
        for (i = 0; s[i] != '\0'; i++);
        i = i++;
    }
    return i;
}
int main()
{
    char s[1000], i, n;

    printf("Enter a string: ");
    scanf("%s", s);

    {
        i = strlgnth(s);
    }
    printf("Length of string: %d", n);

    getch();
    return 0;
}

4 个答案:

答案 0 :(得分:3)

您要将计算结果分配给i,但打印出n

此外,由于n从未被启动过,代码(也)会遇到未定义的行为,读取它以打印出来。


这一行

i=i++;

没用。


分配strlgnth()的结果的值应该具有相同的类型,即int

甚至更好地使strlgnth()和所有i成为size_t

size_t保证宽度足以容纳平台可能使用的任何大小。


最后这一行

scanf("%s", s);

很危险,因为它允许用户过度使用s。为了避免这种情况,告诉scanf()要扫描的最大字符数,即缓冲区的大小 - 1.备用的1个字符必须保存0 - 终结符:

scanf("%999s", s);

也许您应该清理源的布局。这可能有助于获得概述。

答案 1 :(得分:3)

删除此行:

    i=i++;

这是(a)不必要的,(b)它导致未定义的行为。

另外,正如其他人所指出的那样,您在i中混淆了nmain()

答案 2 :(得分:3)

int strlgnth(char *s)
{ 
  int i;    
  for(i=0;s[i]!='\0';i++)
     ;   
  return i;
}

printf("Length of string: %d",i);

答案 3 :(得分:2)

注意,他的路线:

 i=i++;

错了。行为未定义。尝试删除它,因为我在for循环定义中递增。