在C中不使用strlen和函数查找字符串长度
我写了这段代码,但它给出的长度为0。我是初学者,找不到这段代码有什么问题?这是我的代码:在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++; }
#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);