【发布时间】:2020-11-25 20:51:00
【问题描述】:
#include <stdio.h>
int stringLength (char *text)
{
int count = 0;
while (*text != '\0')
{
count++;
text++;
}
return count;
}
int main()
{
char str[25];
int length;
printf("ENter string: ");
scanf("%s", &str);
length = stringLength(str);
if (length > 25)
{
printf("Invalid\n");
printf("Enter string: ");
scanf("%s", &str);
}
printf("Your string is: %s and its %d long", str, length);
return 0;
}
如果第一个输入错误(超过 25 个),它会记住那个数字(长度),当我输入另一个字符串时,它会将数字加在一起。我该如何解决它,让它从头开始?所以它会从头开始计算下一个字符串?
【问题讨论】:
-
stringLength是否调用了新字符串? -
使用
scanf("%24s", str);,您可以确保最多存储 24 个字符(必须为终止符留一个) -
如果字符串的长度超过24,将没有足够的空间来存储它和@987654324内的终止空字节@。如果发生这种情况,您将导致未定义的行为,可能会丢弃堆栈上的数据,例如
length变量和/或main()函数的返回地址。将scanf("%s", &str);更改为scanf("%24s", &str);以避免这种情况。事后检查缓冲区溢出不是可靠的解决方案。
标签: c