尝试打印输入字符串中有多少个字符

时间:2016-11-22 18:20:13

标签: c string

我认为它一直崩溃的原因与我的扫描声明有关,但我尝试了多种不同的。

#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;
}

3 个答案:

答案 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;
}