我认为它一直崩溃的原因与我的扫描声明有关,但我尝试了多种不同的。
#include <stdio.h>
int main()
{
char str[100], i;
printf("Enter a string: ");
scanf_s("%s", &str);
for (i = 0; str[i] != '\0'; ++i);
printf("Length of string: %d", i);
return 0;
}
答案 0 :(得分:0)
有更安全,更健壮的方法来做你想做的事情,但我认为这是一次学习经历,所以试试这个:
#include <stdio.h>
# define MAX_CHARS 100
int main( void )
{
char str[MAX_CHARS];
int i; /* i should be an integer */
printf("Enter a string (less than %d characters) : ", MAX_CHARS );
/* scanf( "%s", str ); */ /* do not use &str, str is already a pointer */
fgets(str, MAX_CHARS - 1, stdin );
for ( i = 0; (i < MAX_CHARS) && ( str[i] != '\0' ); ++i ) ;
printf("Length of string: %d\n", i);
return 0;
}
使用scanf("%s", str);
只会在空格之前拾取字符,
因此,如果您的字符串为hello world
,那么 str 的内容将仅为hello
。
如果你使用scanf然后输入超过MAX_CHARS,或者你的情况是100个字符,那么你将有一个很糟糕的溢出。使用fgets
会更安全,但会在 str 中包含\n
个字符。
通常你按enter
键来表示输入结束,
但是你可以点击control-d来表示文件结尾,这将与fgets
一起使用, str 的内容最后不会有\n
个字符。在我的系统上,我必须按两次ctrl-d。
答案 1 :(得分:0)
还有另一种方法可以解决这个问题
使用gets(str);
代替scanf_s("%s", &str);
并使用strlen(str)
代替循环;
但是你需要为它添加一个<string.h>
#include <stdio.h>
#include<string.h>
int main()
{
char str[100];
int i;
printf("Enter a string: ");
gets(str);
i=strlen(str);
printf("Length of string: %d", i);
return 0;
}
答案 2 :(得分:-1)
1) scanf_s()
不是一件事。等等,是吗?哦,这是一个视觉工作室的事情。好吧。
2)您通过了&str
而不是str
(这就是您崩溃的原因)
int main(){
char str[100];
int i;
printf("Enter a string: ");
scanf("%s", str);
for (i = 0; str[i] != '\0'; ++i){};
printf("Length of string: %d\n", i);
return 0;
}