• ベストアンサー

get()を否定されました…どのように直せばいいでしょうか…

プログラムで、文中のpikatyuという文字をraityuに変換させるプログラムを作れという問題で、以下のプログラムを作成しました。 すると、警告文で prog.c: In function 'main': prog.c:14: warning: unused variable 'c' prog.c:33: warning: control reaches end of non-void function /var/tmp//cc1HByZn.o(.text+0x51):Infunction 'main': : warning: warning: this program uses gets(), which is unsafe. というものが出てきました。 コンパイルはできるのですが、 講師がgets()を使うなと言うのです。 どのようにすれば認めてもらえるのでしょうか? どこをどのように直せばいいか教えてください。お願いします。 #include<stdio.h> #include<string.h> #define SIZE 512 char *search(char *,char *); void replacce(char *,char *,char *); int main(int argc,char, **argv) { char c; int i = 0, j = 0; char a[SIZE][SIZE]; for (i = 0; i < SIZE; i++) { gets(a[i]); } while(a[j][0] != '\0') { replace(a[j],"pikatyu","raityu"); printf("%s\n", a[j]); j++; } } void replace(char *text, char *key, char *rep) { char *p,buf[SIZE]; p = search(text, key); while(p != NULL) { *p ='\0'; strcpy(buf, p + strlen(key)); strcat(text, rep); strcat(text, buf); p = search (p + strlen(rep), key); } } char *search(char *text, char *key) { int m, n; char *p; m = strlen(text); n = strlen(key); for(p = text; p <= text + m - n; p++) { if(strncmp(p, key, n) == 0) return (p); } return (NULL); }

質問者が選んだベストアンサー

  • ベストアンサー
  • tatsu99
  • ベストアンサー率52% (391/751)
回答No.2

fgetsを使ってください。fgetsの使い方がわからない場合は、その旨補足してください。 getsを使うなという理由は、getsを使ったプログラムの場合セキュリティホールが発生し、ハッカー(クラッカー)の攻撃対象となってしまうからです。なぜgetsを使うとセキュリティホールが発生するかは、ここでは説明を割愛しますが、getsが非常に危険な関数であることは、頭にいれておいてください。

train-train-3605
質問者

お礼

お礼が遅くなり、申し訳ありません。無事認めてもらうことができました。本当にありがとうございました。

その他の回答 (1)

  • shidho
  • ベストアンサー率45% (138/303)
回答No.1

宿題だと思いますので、そのものズバリの答えは避けます。 "gets 危険性"といったキーワードで検索してみてください。

関連するQ&A