C.3 string.hの標準関数


1.目的


StringはStringのI/Oに関連しています.hファイルの標準関数を使用して、問題の所在を理解します.

2.標準関数

  • puts
  • fputs
  • gets
  • fgets
  • getchar
  • 3.コード

    #include <stdio.h>
    #include <string.h>
    int main()
    {
      char str1[10], str2[10];
      
      // 방법 1 (stdio.h -> printf)
      printf("이상원\nLee Sang Won\nLSW\n\n");
    
      //방법 2 (string.h -> fgets, fputs, puts for string arr "str")
      puts("Enter your name! : "); // 개행o
      fgets(str1, sizeof str1, stdin);
      fgets(str2, sizeof str2, stdin); // 에러 발생
      fputs(str1, stdout); // 개행x
      return 0;
    }
  • Code explanation
  • Set two string variables of char type and by using fgets
  • input your own name into both variables
  • print out
  • 4.結果(エラー)



    次の問題が発生します:
  • .

  • Enter your name! 後がないと自動的に「n」が開く様子が面白くない.これはputsの自動開行機能のためです.

  • fgets→名前を入力すると、連続するfgetsパラメータ(str 2)を入力できません.(fgetsを連続的に使用する場合に問題が発生します)これはstdin空間に以前の値が存在するためです.
  • 5.トラブルシューティング


    main function
    void Erasestring(char str[]); // stdin에 저장된 이전값을 제거하는(불러들이는) 함수 선언
    
    int main()
    {
      char str1[10], str2[10];
      
      // 방법 1 (stdio.h -> printf)
      printf("이상원\nLee Sang Won\nLSW\n\n");
    
      //방법 2 (string.h -> fgets, fputs, puts for string arr "str")
      fputs("Enter str1 name! : ", stdout); // puts대신 fputs
      fgets(str1, sizeof str1, stdin);
      Erasestring(str1); // stdin에 잔존해 있는 쓰레기값 제거
      fputs("Enter str2 name! : ", stdout);
      fgets(str2, sizeof str2, stdin);
      fputs(str1,stdout);
      fputs(str2,stdout);
      return 0;
    }

  • Code explanation
    注釈にはかなりの部分の説明がありますが、簡単に説明すると
  • putsは自動的に行を開きます.
  • fputsは自動的にオンになりません.
  • fgetsでパラメータを入力すると、stdinに一時保存(削除)され、値が出力にロードされるまで値は変わらないので、個別の関数としてロードする必要があります.
  • Erasestring function
    void Erasestring(char str[])
    {
      while(getchar() != '\n'); 
    /* 문자열로 인식되기 위해선 '\n'가 말미에 붙어있어야하며 다루고 있는 string.h 파일의
    표준함수들은 모두 문자열을 위한 것임으로.. fgets()로 받아들인 string 역시 말미에 '\n'가
    붙어 임시공간에 머물게 된다. 따라서 '\n'전까지의 내용을 불러들여 공간을 비우면 동일한 공간
    을 재사용할 수 있게 되는 것이다.
    */
    }
    

    6.結果(修正)



    7.結論


    stringヘッダファイルの標準関数を使用する必要性を低減することはできません.しかし、事前に熟知していれば、デメリットはありません.