我写了这段代码,但它给出了长度为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;
}
答案 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
中混淆了n
和main()
。
答案 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循环定义中递增。