2017-05-14 51 views
0
#include<stdio.h> 
int main() { 
    char *str, ch; 
    int count = 0, i; 

    printf("\nEnter a string : "); 
    scanf("%s", str); 

    printf("\nEnter the character to be searched : "); 
    scanf("%c", &ch); 

    for (i = 0; str[i] != '\0'; i++) { 
     if (str[i] == ch) 
     count++; 
    } 

    if (count == 0) 
     printf("\nCharacter '%c'is not present", ch); 
    else 
     printf("\nOccurence of character '%c' : %d", ch, count); 

    return (0); 
} 

当我执行此代码时,字符串被采用后,它不会采取任何字符并显示结果。如何读取字符串后跟c中的字符?

+3

1)'str'不指向有效区域。 2)scanf(“%c”,&ch);' - >'scanf(“%c”,&ch);' – BLUEPIXY

+1

'str'是一个未初始化的指针,在scanf中使用它会导致未定义的行为需要分配一个缓冲区并且首先分配给'str' – kaylum

回答

0

,因为你没有为str分配空间...... 你应该改变char *str, ch;到类似char *str = malloc(100), ch;

另外,更改scanf("%c", &ch);scanf(" %c", &ch);到您的代码可能会崩溃(我的机器上验证它的时候发生在我身上)解决你的问题。发生这种情况的原因是,当你输入字符串时,你用回车结束,并且输入被下一个scanf(%c)消耗,所以你的第二个scanf()只读取输入,而不是读你想要的字符。 scanf(" %c", &ch);会忽略所有的空格,包括以前输入的输入:-)和西港岛线让您的字符将被处理

+0

你可能想补充一点,如图所示'scanf()'可能会溢出提供的任何缓冲区。 – alk

+1

@alk是否意味着输入字符串大于缓冲区? – CIsForCookies

0

总是写的scanf这样的,看完前面的换行符:

printf("\nEnter the character to be searched : "); 
scanf(" %c", &ch); 

OR

使用getchar()

printf("\nEnter the character to be searched : "); 
getchar(); 
scanf("%c", &ch); 
0

定义最大长度将是解决这个问题的最简单方法。由于使用scanf,我会推荐使用fgets,如下所示。由于您可以定义要读取的最大字符数,所以它更具有故障安全性。 Tutorialspoint's explanation of fgets

#define MAX_LENGTH 100 

int main() { 
    char str[MAX_LENGTH], ch; 
    int count = 0; 

    printf("\nEnter a string : "); 
    fgets(str, MAX_LENGTH, stdin); 

    printf("\nEnter the character to be searched : "); 
    scanf("%c", &ch); 

    ... 

} 
+0

请注意*使用这个appraoch *'str' *现在*最可能以换行符('\ n')结尾。 – alk

+0

fgets自动在最后一个位置放置一个“\ 0”。 – luddbro

相关问题