[解決済み] scanfを使用してスペースを入力できるようにするにはどうすればよいですか?
2022-04-25 13:16:06
質問
以下のコードを使用します。
char *name = malloc(sizeof(char) + 256);
printf("What is your name? ");
scanf("%s", name);
printf("Hello %s. Nice to meet you.\n", name);
ユーザーは自分の名前を入力することができますが、スペースが入った名前を入力すると
Lucas Aardvark
,
scanf()
の後をすべて切り捨てるだけです。
Lucas
. どうすれば
scanf()
スペースを許可する
解決方法は?
人(と
特に
を使うべきではありません。
scanf("%s")
または
gets()
またはバッファオーバーフロー防止機能を持たないその他の関数は、入力が常に特定の形式であることが確実に分かっている場合(そしておそらくそうでない場合も)以外は、使用しないでください。
よりも覚えておいてください。
scanf
は「スキャンフォーマット」の略で、「スキャンフォーマット」はほとんどありません。
以下
は、ユーザーが入力したデータよりもフォーマットされています。入力データの形式を完全に制御できる場合は理想的ですが、一般にユーザー入力には不向きです。
使用方法
fgets()
(どの
があります。
バッファオーバーフロー防止機能) を使って入力を文字列にし
sscanf()
で評価します。ユーザが入力した内容を解析せずに知りたいだけなので、実際には
sscanf()
この場合、とにかく
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/* Maximum name size + 1. */
#define MAX_NAME_SZ 256
int main(int argC, char *argV[]) {
/* Allocate memory and check if okay. */
char *name = malloc(MAX_NAME_SZ);
if (name == NULL) {
printf("No memory\n");
return 1;
}
/* Ask user for name. */
printf("What is your name? ");
/* Get the name, with size limit. */
fgets(name, MAX_NAME_SZ, stdin);
/* Remove trailing newline, if there. */
if ((strlen(name) > 0) && (name[strlen (name) - 1] == '\n'))
name[strlen (name) - 1] = '\0';
/* Say hello. */
printf("Hello %s. Nice to meet you.\n", name);
/* Free memory and exit. */
free (name);
return 0;
}
関連
-
赤線の位置は必ずしも間違っていない:式は変更可能なlvalueでなければならないエラーは、この文とは別の場所に存在する可能性があります。
-
[解決済み] printf ファミリーを使用して、size_t 変数をポータブルに印刷するにはどうすればよいですか?
-
C/C++の再定義
-
[解決済み] 1ビットのセット、クリア、トグルはどのように行うのですか?
-
[解決済み] 配列のすべてのメンバーを同じ値で初期化するには?
-
[解決済み] タブの代わりにスペースを使うようにEclipseを変更するにはどうしたらいいですか?
-
[解決済み] Goで複数行の文字列はどのように書くのですか?
-
[解決済み] 2次元配列の反復処理において、ループの順序がパフォーマンスに影響するのはなぜですか?
-
[解決済み】文字列の中にある文字列(実際はchar)の出現回数を数えるには?
-
[解決済み】printfを使用して、符号なし長さintをどのようにフォーマットしますか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
initializer element is not constant "というエラーが表示されるのですが?
-
警告:符号付き整数式と符号なし整数式の比較 [-Wsign-compare]
-
警告: 'struct XXX' はパラメータリストの内部で宣言されています。
-
[解決済み] Cプリプロセッサはなぜ "linux "という単語を定数 "1 "と解釈するのですか?
-
[解決済み] 演算子 *, /, +, -, % を使わずに 3 で割る。
-
[解決済み] while ( !feof (file) ) 」は、なぜいつも間違っているのですか?
-
[解決済み] C言語標準に準拠した構造体の初期化方法
-
[解決済み] C言語のi++と++iに性能差はあるのでしょうか?
-
[解決済み] C 言語の配列へのポインタ/ポインタの配列の曖昧さ解消
-
[解決済み] C言語の構造体(CGRectやCGPointなど)をNSLog化することは可能ですか?