人々 (および特に初心者)は使用しないでください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;
}