C.3 string.hの標準関数
1.目的
StringはStringのI/Oに関連しています.hファイルの標準関数を使用して、問題の所在を理解します.
2.標準関数
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;
}
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
注釈にはかなりの部分の説明がありますが、簡単に説明すると
void Erasestring(char str[])
{
while(getchar() != '\n');
/* 문자열로 인식되기 위해선 '\n'가 말미에 붙어있어야하며 다루고 있는 string.h 파일의
표준함수들은 모두 문자열을 위한 것임으로.. fgets()로 받아들인 string 역시 말미에 '\n'가
붙어 임시공간에 머물게 된다. 따라서 '\n'전까지의 내용을 불러들여 공간을 비우면 동일한 공간
을 재사용할 수 있게 되는 것이다.
*/
}
6.結果(修正)
7.結論
stringヘッダファイルの標準関数を使用する必要性を低減することはできません.しかし、事前に熟知していれば、デメリットはありません.
Reference
この問題について(C.3 string.hの標準関数), 我々は、より多くの情報をここで見つけました
https://velog.io/@croco/C.3-string.h의-표준함수
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
Reference
この問題について(C.3 string.hの標準関数), 我々は、より多くの情報をここで見つけました https://velog.io/@croco/C.3-string.h의-표준함수テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol