2016-05-09 12 views
-3

私はcharについて何かを理解しようとします。Cで文の単語を印刷しますか?

私はこのコードを書いていますが、「Hello world」をスキャンしてこのコードで「Hello」を取得するとエラーが発生します。なぜですか? (私はst1 [0] =こんにちはst1 [1] =世界と思った)

どうすればいいですか?

char st1[100]; 
gets(st1); 
printf("%s",st1[0]); 
+3

'st1 [0]'は文字列ではなく 'char'です。 –

+0

また、 'gets'を使うことは勧められません。代わりに 'fgets'を調べることをお勧めします。 – user3186023

+0

バッファオーバーフローの理由により、この機能は無効になりました。 – user3186023

答えて

0

は(以下の私の項目2を参照)おそらくあなたが使用してはかなりのコードではありません。

  1. コンパイラはおそらくprintf()呼び出しを含む行のヒントを与えていることに注意してください。問題はst1 []に文字列を格納することです。 Cでは、文字ストリング(a.k.a.C-ストリング)はヌル終了文字配列(= ASCIIコード0、a.k.a.'a 'で終了した文字配列)に格納されます。 st1 [0]と書くと、配列の最初の文字が1つだけで、ヌル終端のC文字列全体ではありません。
  2. コードは2つの部分から構成されています。データをスキャンして出力します。現在の質問については、出力を修正する必要があります(gets()の次の点も参照してください)。 char st1[100]; gets(st1); printf("%s",st1); //this is where you need a correction ... "%s"という書式設定文字列でprintf()がアドレスを期待し、名前配列(st1)はCのポインタ(アドレス)に崩壊します。あなたのエラーは 'アドレス'を意味するのではなく、 'テーブルからただ1文字を取る'ことを意味するインデックス(st1 [])を使用しています。明らかに、この最初の文字( 'Hello'と入力した場合の 'H')は、配列全体のメモリアドレスとはまったく関係ありません。また、偶然、あなたのレポート(つまり、あなたが実行したコードではないと思う)の「Hello」文字列を指していることはほとんどありません。
  3. 今のところ、私はget()の使用に関する疑問を脇に置いています。これは安全でないとみなすべきです。代わりにfgets()を使用することを検討してください。または、ユーザがst1 []内に余裕があるよりも多くの文字を入力しようとすると、コンピュータがプログラムスタックの他の部分を上書きして、他の無害な変数を破壊し始めると、異常な動作が発生します。
0

複数の方法が最も簡単なものは、次の操作を行うことであろう...あります

char *str1[] = {"Hello", "World"}; 

そして今単語がsplited配列に格納されています。 「Hello」にアクセスするには、str1[0]を使用してください。

もう1つの方法は、 'Hello'を印刷するまでcharでcharを印刷することです。あなたの間違いに

for(int x = 0; x < strlen("Hello") && x < strlen(str1); x++) 
    printf("%c", str1[x]); 

Cの文字列は、文字の配列だけであるので、文字列 'の最初の要素

例(ここでSTR1は、コード内の1つです) Hello World 'は' H '、2番目は' e 'などとなります。

0

st1[0]は、フレーズの最初の文字です。あなたは' '(スペース)と一致するまで反復または文字列の末尾に到達することができます:印刷文字列の

char st1[100]; 
gets(st1); 
for (int i=0; i<100 && st1[i]!=' '; ++i) { 
    printf("%c",st1[i]); 
} 
0

使用puts(st1)を。
st1[0]をprintfに入れることによって、文字列の最初の要素だけを印刷するようにプログラムに指示しました。

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

int main() 
{ 
    char x[100]; 
    gets(x); 
    puts(x); 
    return 0; 
} 
0

st1[0]は、C文字列ではなく、文字列です。あなたが投稿した何

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

int main(void){ 
    char st1[100]; 

    if(fgets(st1, sizeof st1, stdin)){ 
     char *p = strchr(st1, ' '); 
     if(p != NULL) 
      *p = 0; 
     printf("%s\n", &st1[0]); 
    } 
    return 0; 
} 
関連する問題