Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C中不使用strlen和函数查找字符串长度_C - Fatal编程技术网

在C中不使用strlen和函数查找字符串长度

在C中不使用strlen和函数查找字符串长度,c,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++; }

我写了这段代码,但它给出的长度为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;
}

您正在将计算结果指定给i,但打印出n

此外,由于n从未被初始化过,因此代码也会遇到未定义的行为—读取它以将其打印出来

这条线

i=i++;
没用

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

或者更好的是制作strlgnth,所有的都是尺寸

尺寸保证足够宽,以容纳平台可能使用的任何尺寸

最后这一行

scanf("%s", s);
是危险的,因为它允许用户超视距。为了避免这种情况,请告诉scanf要扫描的最大字符数,即缓冲区的大小-1。备用中的1个字符是保持0-终止符所必需的:

scanf("%999s", s);
也许你应该清理一下你源代码的布局。这可能有助于获得概览。

删除此行:

    i=i++;
这是一个不必要的b,它会导致未定义的bahviour


另外,正如其他人所指出的,您主要混淆了i和n。

注意,他的台词:

 i=i++;
这是错误的。该行为未定义。尝试删除它,因为我在for循环定义本身中递增

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


请正确格式化您的代码。您有几个不必要的块括号,为什么?为什么有一个for语句没有循环体???@HotLicks循环体中没有任何操作。s[i]!='\0';i++涵盖了它应该做的一切。@Nabla-啊,是的。事实上他对那部分的理解有点正确。在混乱中很难看到它。并且声明i主要是int i@菲利佩贡·阿尔维斯:是的,那会更好——对于小弦来说,这应该仍然有效。
printf("Length of string: %d",i);