2016-11-22 68 views
0

我认为它不断崩溃的原因与我的扫描语句有关,但我尝试了多种不同的方式。试图打印输入字符串中有多少个字符

#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

什么是'scanf_s()'?它不在手册页中。 – Blacksilver

+1

'scanf_s(“%s”,&str);'应该是'scanf_s(“%s”,str);'。即放下'&' –

+2

@Blacksilver:它是标准的一部分,尽管是可选的。 – Olaf

回答

-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; 
} 
+2

挂上 - ['scanf_s' *是*一个东西](http://stackoverflow.com/questions/21434735/difference-between-scanf-and-scanf-s)。 – usr2564301

+0

这不在我的手册页。 – Blacksilver

+3

我真的不明白你是多么居高临下。 scanf_s是一件事情,我在&中读取字符串。我正在使用visual studio。基于Microsoft的IDE,它使用scanf_s作为更安全的扫描形式。 – Crowe

0

有更安全和更稳健的方式做你正在尝试做的,但我认为这是一个学习的经验,尝试这样的:使用scanf("%s", str);只会之前的空间拿起字符

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

, 所以如果你的字符串是hello world然后str的内容只会hello

如果使用scanf,那么如果您输入的值超过MAX_CHARS,或者您的情况为100个字符,则会出现溢出错误。使用fgets更安全,但将包含\n字符str

通常你打的enter关键信号是输入, 但是你可以打控制d已到文件末尾结束,这将与fgets工作,海峡的内容不会有\n字符在最后。在我的系统中,我必须按两次ctrl-d。

+0

谢谢! @龙虐待尝试这 – Crowe

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; 
} 
+0

Noooooooooo ...不要使用获取。手册页从字面上开始'永远不要使用这个功能;见BUGS'。这只是使用codegolf。 – Blacksilver