2016-10-22 18 views
0
#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 
#include <time.h> 

int main(){ 

    char str [1000] = ""; 
    char ch  = 'M'; 
    char *findM; 
     printf("Enter a line of text\n"); 
     scanf("%s", str); 
      findM = strchr(str, ch); 
     printf("string after %c is %s ", ch, findM); 

    return 0; 
} 

プログラムへの入力は"My name is Steve"であり、このプログラムの出力は、Mが(null)の後の文字列になります。これはなぜ発生しますか?この方法は、任意の一致が見つからない場合は、ヌルになるだろうなぜ出力がnullですか?

+1

..ので、あなたにそれが正常に動作スペースwithiut入力を与える区切り文字として「(スペース)」を検討していますか – milleniumbug

+2

最初の単語に 'M'を入力していませんでした –

+0

@milleniumbug、「hello My name is steve」のようなもので、その後は常にMが(null)の後の文字列 –

答えて

0

おそらくあなたのstr変数が含まれていません。最初の単語のchar 'M' - strchr(string、char)関数は、一致するものが見つからなければnullを返し、最初の空白の後に入力文字列を切り落とします(先行する空白を除く)。彼らのコメントにuser3121023が記載されているので、代わりにfgetsを使用してマルチワード入力をキャプチャします。

+0

それは私に(null)に関係なく、私はそのstrには何もないと仮定していると思うが、私は理由を知りません –

+0

@ムhammedBamneはchar * str = "Muhammed"を設定しようとします。代わりに。 nullを返さないでください。 – Jonas

1

コメントの1つで説明したように、scanf("%s", str)は末尾の空白が見つかるまで読み取ります。あなたの入力では、「私の名前はスティーブです」scanfは、Myの後ろにスペースがあるので、Myまで読むでしょう。

int main() 
{ 
    char str[1000] = ""; 
    char ch = 'M'; 
    char *findM; 
    printf("Enter a line of text\n"); 
    scanf("%999[0-9a-zA-Z ]", str); // Get all alphanumerics and spaces until \n is found 
    findM = strchr(str, ch); 
    findM++; // Increment the pointer to point to the next char after M 
    printf("string after %c is %s ", ch, findM); 

    return 0; 
} 

あなたがscanf()を使用する必要はありません場合、私は離れてから滞在をお勧めします:あなたの入力だけで、あなたが次のことを試みることができる数字、文字、およびスペースを含むと仮定すると

scanf()、代わりにfgets()を使用して:

int main() 
{ 

    char str[1000] = ""; 
    char ch = 'M'; 
    char *findM; 
    printf("Enter a line of text\n"); 
    fgets(str, sizeof(str), stdin); // Get the whole string 
    findM = strchr(str, ch); 
    findM++; // Increase the counter to move to the next char after M 
    printf("string after %c is %s ", ch, findM); 

    return 0; 
} 
0

strchr()はあなたが提供している入力は何だし、期待される出力は何ですか?

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 
#include <time.h> 

int main() 
{ 

    char str [1000] = ""; 
    char ch  = 'M'; 
    char *findM; 
    printf("Enter a line of text\n"); 
     scanf("%s", str); 
     findM = strchr(str, ch); 
    if(findM) 
      printf("string after %c is %s ", ch, findM); 

    else 
     printf("Character not found ...\n"); 
    return 0; 
} 
関連する問題