私はcharについて何かを理解しようとします。Cで文の単語を印刷しますか?
私はこのコードを書いていますが、「Hello world」をスキャンしてこのコードで「Hello」を取得するとエラーが発生します。なぜですか? (私はst1 [0] =こんにちはst1 [1] =世界と思った)
どうすればいいですか?
char st1[100];
gets(st1);
printf("%s",st1[0]);
私はcharについて何かを理解しようとします。Cで文の単語を印刷しますか?
私はこのコードを書いていますが、「Hello world」をスキャンしてこのコードで「Hello」を取得するとエラーが発生します。なぜですか? (私はst1 [0] =こんにちはst1 [1] =世界と思った)
どうすればいいですか?
char st1[100];
gets(st1);
printf("%s",st1[0]);
は(以下の私の項目2を参照)おそらくあなたが使用してはかなりのコードではありません。
char st1[100]; gets(st1); printf("%s",st1); //this is where you need a correction
... "%s"という書式設定文字列でprintf()がアドレスを期待し、名前配列(st1)はCのポインタ(アドレス)に崩壊します。あなたのエラーは 'アドレス'を意味するのではなく、 'テーブルからただ1文字を取る'ことを意味するインデックス(st1 [])を使用しています。明らかに、この最初の文字( 'Hello'と入力した場合の 'H')は、配列全体のメモリアドレスとはまったく関係ありません。また、偶然、あなたのレポート(つまり、あなたが実行したコードではないと思う)の「Hello」文字列を指していることはほとんどありません。複数の方法が最も簡単なものは、次の操作を行うことであろう...あります
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 'などとなります。
st1[0]
は、フレーズの最初の文字です。あなたは' '
(スペース)と一致するまで反復または文字列の末尾に到達することができます:印刷文字列の
char st1[100];
gets(st1);
for (int i=0; i<100 && st1[i]!=' '; ++i) {
printf("%c",st1[i]);
}
使用puts(st1)
を。
st1[0]
をprintfに入れることによって、文字列の最初の要素だけを印刷するようにプログラムに指示しました。
#include <stdio.h>
#include <stdlib.h>
int main()
{
char x[100];
gets(x);
puts(x);
return 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;
}
'st1 [0]'は文字列ではなく 'char'です。 –
また、 'gets'を使うことは勧められません。代わりに 'fgets'を調べることをお勧めします。 – user3186023
バッファオーバーフローの理由により、この機能は無効になりました。 – user3186023