私はC言語を初めて使用し、ユーザーから文字と文字列(文、最大長25)を読み取ろうとしています。
次のコード行で何が間違っているのかわかりません。エラー「セグメント障害」が発生します。
#include <stdio.h>
int main(){
char * str[25];
char car;
printf("Enter a character: ");
car = getchar();
printf("Enter a sentence: ");
scanf("%[^\n]s", &str);
printf("\nThe sentence is %s, and the character is %s\n", str, car);
return 0;
}
ありがとう!
str
は、char
の配列ではなく、char
への25個のポインターの配列です。そのため、その宣言を
char str[25];
また、scanf
を使用して文を読むことはできません。最初の空白で読み上げが停止するため、代わりにfgets
を使用して文を読みます。
最後のprintf
では、%c
ではなく、%s
指定子が必要です。また、stdin
には'\n'
が残っているため、標準入力をフラッシュする必要があります。したがって、これらの文字をスローする必要があります。
改訂されたプログラムは現在
#include <stdio.h>
void flush();
int main()
{
char str[25], car;
printf("Enter a character\n");
car = getchar();
flush();
printf("Enter a sentence\n");
fgets(str, 25, stdin);
printf("\nThe sentence is %s, and the character is %c\n", str, car);
return 0;
}
void flush()
{
int c;
while ((c = getchar()) != '\n' && c != EOF)
;
}
4つの変更を行う必要があります。
変化する
_char * str[25];
_
に
_char str[25];
_
char
への25個のポインターの配列ではなく、25個のchar
sの配列が必要です。
変化する
_char car;
_
に
_int car;
_
as getchar()
は、int
ではなく、char
を返します。
変化する
_scanf("%[^\n]s", &str);
_
に
_scanf( "%24[^\n]", str);
_
scanf
に指示します
'\0'
_に対して+1)をスキャンするか、_\n
_までスキャンして、str
に保存します。変化する
_printf("\nThe sentence is %s, and the character is %s\n", str, car);
_
に
_printf("\nThe sentence is %s, and the character is %c\n", str, car);
_
char
の正しい書式指定子は_%c
_ではなく_%s
_であるためです。