{"id":753,"date":"2009-01-20T02:24:10","date_gmt":"2009-01-19T17:24:10","guid":{"rendered":"http:\/\/terzeron.com\/?p=753"},"modified":"2009-01-20T02:24:10","modified_gmt":"2009-01-19T17:24:10","slug":"c%ec%9d%98-ifstream%ec%9d%98-small-buffer-%eb%ac%b8%ec%a0%9c","status":"publish","type":"post","link":"https:\/\/terzeron.com\/?p=753","title":{"rendered":"C++\uc758 ifstream\uc758 small buffer \ubb38\uc81c"},"content":{"rendered":"<p>C++ \ud504\ub85c\uadf8\ub7a8\uc5d0\uc11c ifstream\uc744 \uc790\uc8fc \uc0ac\uc6a9\ud558\uac8c \ub418\ub294\ub370, \uc8fc\ub85c \uc774 \ud074\ub798\uc2a4\uc758 \uba64\ubc84 \ud568\uc218\uc778 getline()\uc744 \uc774\uc6a9\ud558\uc5ec \ud55c \uc904\uc529 \ucc98\ub9ac\ud558\ub294 \uacbd\uc6b0\uac00 \ub300\ubd80\ubd84\uc774\ub2e4.<\/p>\n<p>\uc774\ub7f4 \ub54c \uc544\ubb34 \uc0dd\uac01\uc5c6\uc774 getline()\uc5d0 \uc0ac\uc6a9\ud560 buffer\uc758 \ud06c\uae30\ub97c \ub108\ubb34 \uc791\uac8c \uc7a1\uc73c\uba74 \ud574\uacb0\ud558\uae30 \uc5b4\ub824\uc6b4 \ubb38\uc81c\uac00 \ubc1c\uc0dd\ud560 \uc218 \uc788\ub2e4.<\/p>\n<p>\ub2e4\uc74c\uc758 \ub370\uc774\ud130\ub97c \ud3ec\ud568\ud55c \ud14d\uc2a4\ud2b8 \ud30c\uc77c\uc774 \uc788\ub2e4.<\/p>\n<blockquote><p>hello<br \/>\nworld<br \/>\nExtracts characters from the input sequence and stores them as a c-string into the array beginning at s.<br \/>\njava<br \/>\ncoffee<\/p><\/blockquote>\n<p>\uc77c\ubc18\uc801\uc73c\ub85c \uc0ac\uc6a9\ud558\ub294 \ucf54\ub4dc\ub294 \ub2e4\uc74c\uacfc \uac19\ub2e4. \ubb3c\ub860 C++ \ud504\ub85c\uadf8\ub798\uba38\ub9c8\ub2e4 \uc57d\uac04\uc529\uc758 \uc2a4\ud0c0\uc77c\uc758 \ucc28\uc774\ub294 \uc788\uaca0\uc9c0\ub9cc, Stroustrup\uc758 C++ \ucc45\uc5d0\ub3c4 getline()\uc758 \uc0ac\uc6a9\ubc29\uc2dd\uc5d0 \ub300\ud574 \ud2b9\ubcc4\ud55c \uc81c\ud55c\uc774\ub098 \uac00\uc774\ub4dc\ub97c \ub450\uace0 \uc788\uc9c0 \uc54a\uc73c\ubbc0\ub85c while loop\uc5d0\uc11c getline()\uc744 \ub2e8\uc21c \ubc18\ubcf5\ud558\ub294 \uac83\uc774\ub2e4.<\/p>\n<pre class=\"brush: c++\">#include <iostream>\n#include <fstream>\n#include <errno.h>\n#include <string.h>\n\nusing namespace std;\n\nconst int MAX_LINE_LEN = 20;\n\nint main(void)\n{\nifstream fstrm;\nstring keyword_file = \"test.txt\";\nchar line[MAX_LINE_LEN];\n\nfstrm.open(keyword_file.c_str());\nif (fstrm.is_open() == false) {\ncout << \"Error: can't open keyword file '\" << keyword_file\n<< \"', \" << errno << \": \" << strerror(errno) << endl;\nreturn -1;\n}\nwhile (fstrm.getline(line, MAX_LINE_LEN)) {\ncout << line << endl;\n}\nfstrm.close();\n}<\/pre>\n<p>\uc774 \ucf54\ub4dc\ub294 \ucc98\uc74c \ub450 \uc904\ub9cc\uc744 \ucd9c\ub825\ud558\uace0 20 \ubc14\uc774\ud2b8\ub97c \ucd08\uacfc\ud558\ub294 \uc785\ub825\uc744 \ub9cc\ub098\uac8c \ub418\uba74 \ubc14\ub85c \uc885\ub8cc\ud558\uac8c \ub41c\ub2e4. getline()\uc774 buffer overflow\uc5d0 \ub300\ud574\uc11c 0\uc744 \ubc18\ud658\ud558\uae30 \ub54c\ubb38\uc5d0 while loop\ub97c \ud0c8\ucd9c\ud558\uac8c \ub418\ub294 \uac83\uc774\ub2e4.<\/p>\n<blockquote><p>hello<br \/>\nworld<\/p><\/blockquote>\n<p>while loop\ub97c \ubd84\ub9ac\ud558\uc5ec \ub2e4\uc74c\uacfc \uac19\uc740 \ucf54\ub4dc\ub97c \uc0ac\uc6a9\ud558\uac8c \ub418\uba74 \uc5b4\ub5bb\uac8c \ub420\uae4c?<\/p>\n<pre class=\"brush: c++\"> while (1) {\nfstrm.getline(line, MAX_LINE_LEN);\ncout << line << endl;\n}<\/pre>\n<p>getline()\uc5d0 \ub300\ud574\uc11c \uccb4\ud06c\ub97c \ud558\uc9c0 \uc54a\uae30 \ub54c\ubb38\uc5d0 \ubb34\ud55c \ub8e8\ud504\uc5d0 \ube60\uc9c4\ub2e4. EOF\ub97c \ud655\uc778\ud558\ub3c4\ub85d \ub2e4\uc74c \ucf54\ub4dc\ub97c \uc368\ub3c4 \ub9c8\ucc2c\uac00\uc9c0\uc774\ub2e4.<\/p>\n<pre class=\"brush: c++\"> while (fstrm.eof() == false) {\nfstrm.getline(line, MAX_LINE_LEN);\ncout << line << endl;\n}<\/pre>\n<p>\uadf8\ub7fc EOF \ub300\uc2e0\uc5d0 fstream \uac1d\uccb4\uc758 \uc0c1\ud0dc\ub97c \ud655\uc778\ud558\ub294 good() \ud568\uc218\ub97c \uc0ac\uc6a9\ud558\uba74 \uc5b4\ub5bb\uac8c \ub420\uae4c?<\/p>\n<pre class=\"brush: c++\"> while (fstrm.good()) {\nfstrm.getline(line, MAX_LINE_LEN);\ncout << line << endl;\n}<\/pre>\n<p>\ub531 20\ubc14\uc774\ud2b8\uae4c\uc9c0\ub9cc \uc77d\uace0 \uc885\ub8cc\ud558\uac8c \ub41c\ub2e4. \ud30c\uc77c\uc758 \ub098\uba38\uc9c0 \ubd80\ubd84\uc744 \uc77d\uc9c0 \ubabb\ud558\ub294 \uac83\uc774\ub2e4.<\/p>\n<blockquote><p>hello<br \/>\nworld<br \/>\nExtracts characters<\/p><\/blockquote>\n<p>\uc5ec\ud0dc\uae4c\uc9c0\uc758 \uc608\uc81c \ucf54\ub4dc\ub4e4\uc740 \ubaa8\ub450 \uc6d0\ud558\ub294 \uacb0\uacfc\ub97c \ub0b4\uc9c0 \ubabb\ud588\ub2e4. \uc774\uc81c \ub450 \uac00\uc9c0 \uc120\ud0dd\uc774 \uc874\uc7ac\ud55c\ub2e4.<\/p>\n<p>\uccab\ubc88\uc9f8\ub294 \ubc84\ud37c \uc774\uc0c1\uc758 \uc785\ub825\uc740 \ubb34\uc2dc\ud558\uace0 \ub2e4\uc74c \uc904\ub85c \ub118\uc5b4\uac00\ub294 \uac83\uc774\ub2e4.<\/p>\n<p>\ub450\ubc88\uc9f8\ub294 \ubc84\ud37c\ub97c \ub3d9\uc801\uc73c\ub85c \ub298\ub824\uc11c\ub77c\ub3c4 \ubaa8\ub450 \uc77d\uc5b4\ub0b4\ub294 \uac83\uc774\ub2e4. \uadf8\ub7ec\ub098 \uc774 \ubc29\ubc95\uc740 \uc0ac\uc6a9\uc790\uc758 \uc785\ub825\uc744 \ubb34\ud55c\ud788 \ubc1b\uc73c\ub824\uace0 \uc2dc\ub3c4\ud558\ub2e4\uac00 \uba54\ubaa8\ub9ac \ubd80\uc871\uc744 \uacaa\uac70\ub098 \uc2a4\ud0dd \uc624\ubc84\ud50c\ub85c\uc6b0\ub85c \uc778\ud574 \ubcf4\uc548 \uc0c1\uc758 \uacb0\uc810\uc744 \ub178\ucd9c\uc2dc\ud0a4\uac8c \ub41c\ub2e4. \uc774 \ubc29\ubc95\uc5d0 \ub300\ud55c \uc790\uc138\ud55c \uc124\uba85\uc740 \uc0dd\ub7b5\ud55c\ub2e4.<\/p>\n<p>\uccab\ubc88\uc9f8 \ubc29\ubc95\uc740 \ub2e4\uc74c\uacfc \uac19\uc774 \uad6c\ud604\ud560 \uc218 \uc788\ub2e4. getline() \ud638\ucd9c \ud6c4\uc5d0 fstream\uc758 \uc0c1\ud0dc\ub97c \uccb4\ud06c\ud574\ubcf4\ub294 \uac83\uc774\ub2e4. fstream\uc758 \uc0c1\ud0dc\uac00 \uc88b\uc9c0 \uc54a\uc9c0\ub9cc EOF\ub294 \uc544\ub2cc \uc0c1\ud0dc\ub77c\uba74 \uc5d0\ub7ec \uc0c1\ud0dc\ub97c \ucd08\uae30\ud654\ud558\uace0 \ub2e4\uc74c \uc904\ubd80\ud130 \ub2e4\uc2dc \uc77d\ub3c4\ub85d \ud558\ub294 \uac83\uc774\ub2e4.<\/p>\n<pre class=\"brush: c++\"> while (fstrm.eof() == false) {\nfstrm.getline(line, MAX_LINE_LEN);\nif (fstrm.good() == false && fstrm.eof() == false) {\nfstrm.clear();\nfstrm.ignore(MAX_LINE_LEN, '\\n');\ncontinue;\n}\ncout << line << endl;\n}<\/pre>\n<blockquote><p>hello<br \/>\nworld<br \/>\njava<br \/>\ncoffee<\/p><\/blockquote>\n<p>ignore() \ud568\uc218\ub97c \ud638\ucd9c\ud558\uac8c \ub418\uba74 \ubc84\ud37c\ubcf4\ub2e4 \ud070 \uc785\ub825\uc758 (\ubc84\ud37c \ud06c\uae30\ub9cc\ud55c) \ub4b7\ucabd \ubd80\ubd84\uc744 \ubc84\ub9ac\ub294 \ud6a8\uacfc\ub97c \uac00\uc9c4\ub2e4. ignore() \ud568\uc218\ub97c \ud638\ucd9c\ud558\uc9c0 \uc54a\ub294\ub2e4\uba74 \ub2e4\uc74c\uacfc \uac19\uc740 \uacb0\uacfc\ub97c \uc5bb\uac8c \ub420 \uac83\uc774\ub2e4.<\/p>\n<blockquote><p>hello<br \/>\nworld<br \/>\ning at s.<br \/>\njava<br \/>\ncoffee\n<\/p><\/blockquote>\n<p>\uc138\ubc88\uc9f8 \ubc29\ubc95\ub3c4 \uc788\uae34 \ud558\ub2e4. gcount()\ub97c \uc774\uc6a9\ud558\uc5ec getline()\uc774 \uc77d\uc5b4\ub0b8 \ub370\uc774\ud130\uc758 \ud06c\uae30\ub97c \ud655\uc778\ud558\uc5ec \ubc84\ud37c \ud06c\uae30\ubcf4\ub2e4 \uc791\uac70\ub098 \uac19\uc740\uc9c0\ub97c \ud655\uc778\ud558\ub294 \uac83\uc774\ub2e4. do while loop\uc73c\ub85c \uac10\uc2f8\uba74 \ub41c\ub2e4. \uac1c\uc778\uc801\uc73c\ub85c \uadf8\ub2e4\uc9c0 \uc88b\uc544\ud558\ub294 \uc2a4\ud0c0\uc77c\uc740 \uc544\ub2c8\ub2e4.<\/p>\n<p>* 1\ub144 \ub3d9\uc548 \ub9c8\uc74c\uc5d0 \ub2f4\uc544\ub480\ub358 \ub0b4\uc6a9\uc744 \uc815\ub9ac\ud558\ub824\uace0 \ud558\ub2c8 \uc798 \uae30\uc5b5\uc774 \ub098\uc9c8 \uc54a\uc544\uc11c, \ub9c9\uc0c1 \uae00\ub85c \uc4f0\ub824\uace0 \ud558\ub2c8\uae4c \uac70\uce5c \ud45c\ud604\uc774 \ub09c\ubb34\ud560 \ubfd0 \ub2e4\ub4ec\uc5b4\uc9c0\uc9c8 \uc54a\ub294\ub2e4. \uc774 \ubb38\uc81c\uc5d0\ub294 \uc0ac\uc2e4 \ub2e8 \ud55c \uac00\uc9c0\uc758 \uc815\ub2f5\uc740 \uc5c6\uace0 \uc5ec\ub7ec\uac00\uc9c0 \ubc29\ubc95\uc774 \uc788\uc744 \uc218 \uc788\ub2e4. \uadf8\ub7ec\ub098 \uc758\uc678\ub85c \uc774 \ubb38\uc81c\uc5d0 \ub300\ud574 \uc8fc\uc704 \uac1c\ubc1c\uc790\ub4e4\uc5d0\uac8c \ubb3c\uc5b4\ubcf4\uba74 \uace0\ubbfc\uc744 \ud574 \ubcf8 \uc0ac\ub78c\uc774 \uc5c6\uc5b4\uc11c \ud55c \ubc88 \uc815\ub9ac\ud574\ubd10\uc57c\uaca0\ub2e4\ub294 \uc0dd\uac01\uc744 \ud558\uace0 \uc788\uc5c8\ub2e4. \uc544\ubb34\ub798\ub3c4 \ub0b4\uac00 \ud55c\ub3d9\uc548 \ub9e1\uc558\ub358 \uac1c\ubc1c \uc5c5\ubb34\uac00 \uac80\uc0c9\uc5b4\ub4e4\uc744 \uc815\ud574\uc9c4 \uc2dc\uac04 \ub0b4\uc5d0 \uc9d1\uacc4\ud558\uace0 \ucc98\ub9ac\ud558\ub294-\ud544\uc694\ud558\uba74 \ubc84\ub9ac\uae30\ub3c4 \ud558\uace0-\uc77c\uc774\ub2e4\ubcf4\ub2c8 \ub098\ub9cc\uc758 \uace0\ubbfc\uc774 \uc544\ub2c8\uc5c8\uc744\uae4c \uc2f6\ub2e4.<\/p>\n<div class=\"fb-background-color\">\n\t\t\t  <div \n\t\t\t  \tclass = \"fb-comments\" \n\t\t\t  \tdata-href = \"https:\/\/terzeron.com\/?p=753\"\n\t\t\t  \tdata-numposts = \"100\"\n\t\t\t  \tdata-lazy = \"true\"\n\t\t\t\tdata-colorscheme = \"light\"\n\t\t\t\tdata-order-by = \"time\"\n\t\t\t\tdata-mobile=true>\n\t\t\t  <\/div><\/div>\n\t\t  <style>\n\t\t    .fb-background-color {\n\t\t\t\tbackground: #ffffff !important;\n\t\t\t}\n\t\t\t.fb_iframe_widget_fluid_desktop iframe {\n\t\t\t    width: 100% !important;\n\t\t\t}\n\t\t  <\/style>\n\t\t  ","protected":false},"excerpt":{"rendered":"<p>C++ \ud504\ub85c\uadf8\ub7a8\uc5d0\uc11c ifstream\uc744 \uc790\uc8fc \uc0ac\uc6a9\ud558\uac8c \ub418\ub294\ub370, \uc8fc\ub85c \uc774 \ud074\ub798\uc2a4\uc758 \uba64\ubc84 \ud568\uc218\uc778 getline()\uc744 \uc774\uc6a9\ud558\uc5ec \ud55c \uc904\uc529 \ucc98\ub9ac\ud558\ub294 \uacbd\uc6b0\uac00 \ub300\ubd80\ubd84\uc774\ub2e4. \uc774\ub7f4 \ub54c \uc544\ubb34 \uc0dd\uac01\uc5c6\uc774 getline()\uc5d0 \uc0ac\uc6a9\ud560 buffer\uc758 \ud06c\uae30\ub97c \ub108\ubb34 \uc791\uac8c \uc7a1\uc73c\uba74 \ud574\uacb0\ud558\uae30 \uc5b4\ub824\uc6b4 \ubb38\uc81c\uac00 \ubc1c\uc0dd\ud560 \uc218 \uc788\ub2e4. \ub2e4\uc74c\uc758 \ub370\uc774\ud130\ub97c \ud3ec\ud568\ud55c \ud14d\uc2a4\ud2b8 \ud30c\uc77c\uc774 &hellip; <a href=\"https:\/\/terzeron.com\/?p=753\">\uacc4\uc18d \uc77d\uae30 <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_sitemap_exclude":false,"_sitemap_priority":"","_sitemap_frequency":"","footnotes":""},"categories":[13],"tags":[],"class_list":["post-753","post","type-post","status-publish","format-standard","hentry","category-programming"],"_links":{"self":[{"href":"https:\/\/terzeron.com\/index.php?rest_route=\/wp\/v2\/posts\/753","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/terzeron.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/terzeron.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/terzeron.com\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/terzeron.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=753"}],"version-history":[{"count":0,"href":"https:\/\/terzeron.com\/index.php?rest_route=\/wp\/v2\/posts\/753\/revisions"}],"wp:attachment":[{"href":"https:\/\/terzeron.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=753"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/terzeron.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=753"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/terzeron.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=753"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}