{"id":19454,"date":"2022-11-06T18:51:49","date_gmt":"2022-11-06T13:21:49","guid":{"rendered":"https:\/\/jassweb.com\/solved\/solved-what-is-the-difference-between-scanf-sa-scanfnsa-and-getsa-for-strings-in-c-programming\/"},"modified":"2022-11-06T18:51:49","modified_gmt":"2022-11-06T13:21:49","slug":"solved-what-is-the-difference-between-scanf-sa-scanfnsa-and-getsa-for-strings-in-c-programming","status":"publish","type":"post","link":"https:\/\/jassweb.com\/solved\/solved-what-is-the-difference-between-scanf-sa-scanfnsa-and-getsa-for-strings-in-c-programming\/","title":{"rendered":"[Solved] What is the difference between scanf (\u201c%s&#8221;,a) scanf(&#8220;%[^\\n]s&#8221;,a) and gets(a) for strings in C programming?"},"content":{"rendered":"<p> [ad_1]<br \/>\n<\/p>\n<div id=\"answer-45876957\" class=\"answer js-answer accepted-answer js-accepted-answer\" data-answerid=\"45876957\" data-parentid=\"45876377\" data-score=\"2\" data-position-on-page=\"2\" data-highest-scored=\"0\" data-question-has-accepted-highest-score=\"0\" itemprop=\"suggestedAnswer\" itemscope itemtype=\"https:\/\/schema.org\/Answer\">\n<div class=\"post-layout\">\n<div class=\"votecell post-layout--left\"><\/div>\n<div class=\"answercell post-layout--right\">\n<div class=\"s-prose js-post-body\" itemprop=\"text\">\n<p>First of all, they <strong>all have undefined behavior<\/strong> for the same reason: They will read a number of characters <strong>you can&#8217;t know in advance<\/strong>, but through your pointer, you provide storage where to store this data, and this storage has some fixed size. Therefore, there are <strong>always<\/strong> inputs possible that will <strong>overflow<\/strong> your buffer. You should&#8217;nt ever use <strong>any<\/strong> of these lines in your code.<\/p>\n<p>That said:<\/p>\n<ul>\n<li>\n<p><code>gets()<\/code> reads a <em>line<\/em> of input and stores it to your buffer. It also reads the newline character, but this isn&#8217;t stored. <strong>This function is broken by design<\/strong>, as there is <strong>no way to use it safely<\/strong>. Don&#8217;t ever use it. It has been <strong>removed<\/strong> from the C standard in C11, so you could only use it with older standards anyways. The correct replacement is <code>char a[100]; fgets(a, sizeof a, stdin);<\/code>. This <strong>will<\/strong> store the newline character in the buffer, though.<\/p>\n<\/li>\n<li>\n<p><code>scanf(\"%[^\\n]s\", ...)<\/code> will also read a <em>line<\/em> of input. The <code>[]<\/code> conversion specifier takes a list of accepted or, with <code>^<\/code> in front, rejected characters. So with this syntax, it will accept any character <strong>except<\/strong> newline. Therefore, the newline character <strong>won&#8217;t be read<\/strong> this way. The <code>s<\/code> would be searched in the input  <em>literally<\/em>, it&#8217;s not what you mean. <code>s<\/code> and <code>[]<\/code> are <em>different<\/em> conversion specifiers. To use this one correctly, you must use the field with like so: <code>char a[100]; scanf(\"%99[^\\n]\", a);<\/code>. Note that you have to specify <em>one less<\/em> than your buffer size because <code>scanf()<\/code> doesn&#8217;t count the <code>'\\0'<\/code> character that&#8217;s appended as an end mark for the string.<\/p>\n<\/li>\n<li>\n<p><code>scanf(\"%s\", ...)<\/code> reads a &#8220;<em>word<\/em>&#8220;, that is it stops at the first <em>whitespace<\/em> character. To use this correctly, as above, use something like <code>char a[100]; scanf(\"%99s\", a);<\/code>.<\/p>\n<\/li>\n<\/ul>\n<\/div>\n<div class=\"mt24\"><\/div>\n<\/div>\n<p>            <span class=\"d-none\" itemprop=\"commentCount\">3<\/span> <\/p><\/div>\n<\/div>\n<p>[ad_2]<\/p>\n<p>solved What is the difference between scanf (\u201c%s&#8221;,a) scanf(&#8220;%[^\\n]s&#8221;,a) and gets(a) for strings in C programming? <\/p>\n","protected":false},"excerpt":{"rendered":"<p>[ad_1] First of all, they all have undefined behavior for the same reason: They will read a number of characters you can&#8217;t know in advance, but through your pointer, you provide storage where to store this data, and this storage has some fixed size. Therefore, there are always inputs possible that will overflow your buffer. &#8230; <a title=\"[Solved] What is the difference between scanf (\u201c%s&#8221;,a) scanf(&#8220;%[^\\n]s&#8221;,a) and gets(a) for strings in C programming?\" class=\"read-more\" href=\"https:\/\/jassweb.com\/solved\/solved-what-is-the-difference-between-scanf-sa-scanfnsa-and-getsa-for-strings-in-c-programming\/\" aria-label=\"More on [Solved] What is the difference between scanf (\u201c%s&#8221;,a) scanf(&#8220;%[^\\n]s&#8221;,a) and gets(a) for strings in C programming?\">Read more<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[320],"tags":[324,585],"class_list":["post-19454","post","type-post","status-publish","format-standard","hentry","category-solved","tag-c","tag-scanf"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.5 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>[Solved] What is the difference between scanf (\u201c%s&quot;,a) scanf(&quot;%[^\\n]s&quot;,a) and gets(a) for strings in C programming? - JassWeb<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/jassweb.com\/solved\/solved-what-is-the-difference-between-scanf-sa-scanfnsa-and-getsa-for-strings-in-c-programming\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"[Solved] What is the difference between scanf (\u201c%s&quot;,a) scanf(&quot;%[^\\n]s&quot;,a) and gets(a) for strings in C programming? - JassWeb\" \/>\n<meta property=\"og:description\" content=\"[ad_1] First of all, they all have undefined behavior for the same reason: They will read a number of characters you can&#8217;t know in advance, but through your pointer, you provide storage where to store this data, and this storage has some fixed size. Therefore, there are always inputs possible that will overflow your buffer. ... Read more\" \/>\n<meta property=\"og:url\" content=\"https:\/\/jassweb.com\/solved\/solved-what-is-the-difference-between-scanf-sa-scanfnsa-and-getsa-for-strings-in-c-programming\/\" \/>\n<meta property=\"og:site_name\" content=\"JassWeb\" \/>\n<meta property=\"article:published_time\" content=\"2022-11-06T13:21:49+00:00\" \/>\n<meta name=\"author\" content=\"Kirat\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Kirat\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"2 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/jassweb.com\/solved\/solved-what-is-the-difference-between-scanf-sa-scanfnsa-and-getsa-for-strings-in-c-programming\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/jassweb.com\/solved\/solved-what-is-the-difference-between-scanf-sa-scanfnsa-and-getsa-for-strings-in-c-programming\/\"},\"author\":{\"name\":\"Kirat\",\"@id\":\"https:\/\/jassweb.com\/solved\/#\/schema\/person\/65c9c7b7958150c0dc8371fa35dd7c31\"},\"headline\":\"[Solved] What is the difference between scanf (\u201c%s&#8221;,a) scanf(&#8220;%[^\\\\n]s&#8221;,a) and gets(a) for strings in C programming?\",\"datePublished\":\"2022-11-06T13:21:49+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/jassweb.com\/solved\/solved-what-is-the-difference-between-scanf-sa-scanfnsa-and-getsa-for-strings-in-c-programming\/\"},\"wordCount\":312,\"publisher\":{\"@id\":\"https:\/\/jassweb.com\/solved\/#organization\"},\"keywords\":[\"c++\",\"scanf\"],\"articleSection\":[\"Solved\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/jassweb.com\/solved\/solved-what-is-the-difference-between-scanf-sa-scanfnsa-and-getsa-for-strings-in-c-programming\/\",\"url\":\"https:\/\/jassweb.com\/solved\/solved-what-is-the-difference-between-scanf-sa-scanfnsa-and-getsa-for-strings-in-c-programming\/\",\"name\":\"[Solved] What is the difference between scanf (\u201c%s\\\",a) scanf(\\\"%[^\\\\n]s\\\",a) and gets(a) for strings in C programming? - JassWeb\",\"isPartOf\":{\"@id\":\"https:\/\/jassweb.com\/solved\/#website\"},\"datePublished\":\"2022-11-06T13:21:49+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/jassweb.com\/solved\/solved-what-is-the-difference-between-scanf-sa-scanfnsa-and-getsa-for-strings-in-c-programming\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/jassweb.com\/solved\/solved-what-is-the-difference-between-scanf-sa-scanfnsa-and-getsa-for-strings-in-c-programming\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/jassweb.com\/solved\/solved-what-is-the-difference-between-scanf-sa-scanfnsa-and-getsa-for-strings-in-c-programming\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/jassweb.com\/solved\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"[Solved] What is the difference between scanf (\u201c%s&#8221;,a) scanf(&#8220;%[^\\\\n]s&#8221;,a) and gets(a) for strings in C programming?\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/jassweb.com\/solved\/#website\",\"url\":\"https:\/\/jassweb.com\/solved\/\",\"name\":\"JassWeb\",\"description\":\"Build High-quality Websites\",\"publisher\":{\"@id\":\"https:\/\/jassweb.com\/solved\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/jassweb.com\/solved\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/jassweb.com\/solved\/#organization\",\"name\":\"Jass Web\",\"url\":\"https:\/\/jassweb.com\/solved\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/jassweb.com\/solved\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/jassweb.com\/wp-content\/uploads\/2021\/02\/jass-website-logo-1.png\",\"contentUrl\":\"https:\/\/jassweb.com\/wp-content\/uploads\/2021\/02\/jass-website-logo-1.png\",\"width\":693,\"height\":132,\"caption\":\"Jass Web\"},\"image\":{\"@id\":\"https:\/\/jassweb.com\/solved\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/jassweb.com\/solved\/#\/schema\/person\/65c9c7b7958150c0dc8371fa35dd7c31\",\"name\":\"Kirat\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/jassweb.com\/solved\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/jassweb.com\/solved\/wp-content\/litespeed\/avatar\/1261af3c9451399fa1336d28b98ea3bb.jpg?ver=1776403586\",\"contentUrl\":\"https:\/\/jassweb.com\/solved\/wp-content\/litespeed\/avatar\/1261af3c9451399fa1336d28b98ea3bb.jpg?ver=1776403586\",\"caption\":\"Kirat\"},\"sameAs\":[\"http:\/\/jassweb.com\"],\"url\":\"https:\/\/jassweb.com\/solved\/author\/jaspritsinghghumangmail-com\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"[Solved] What is the difference between scanf (\u201c%s\",a) scanf(\"%[^\\n]s\",a) and gets(a) for strings in C programming? - JassWeb","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/jassweb.com\/solved\/solved-what-is-the-difference-between-scanf-sa-scanfnsa-and-getsa-for-strings-in-c-programming\/","og_locale":"en_US","og_type":"article","og_title":"[Solved] What is the difference between scanf (\u201c%s\",a) scanf(\"%[^\\n]s\",a) and gets(a) for strings in C programming? - JassWeb","og_description":"[ad_1] First of all, they all have undefined behavior for the same reason: They will read a number of characters you can&#8217;t know in advance, but through your pointer, you provide storage where to store this data, and this storage has some fixed size. Therefore, there are always inputs possible that will overflow your buffer. ... Read more","og_url":"https:\/\/jassweb.com\/solved\/solved-what-is-the-difference-between-scanf-sa-scanfnsa-and-getsa-for-strings-in-c-programming\/","og_site_name":"JassWeb","article_published_time":"2022-11-06T13:21:49+00:00","author":"Kirat","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Kirat","Est. reading time":"2 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/jassweb.com\/solved\/solved-what-is-the-difference-between-scanf-sa-scanfnsa-and-getsa-for-strings-in-c-programming\/#article","isPartOf":{"@id":"https:\/\/jassweb.com\/solved\/solved-what-is-the-difference-between-scanf-sa-scanfnsa-and-getsa-for-strings-in-c-programming\/"},"author":{"name":"Kirat","@id":"https:\/\/jassweb.com\/solved\/#\/schema\/person\/65c9c7b7958150c0dc8371fa35dd7c31"},"headline":"[Solved] What is the difference between scanf (\u201c%s&#8221;,a) scanf(&#8220;%[^\\n]s&#8221;,a) and gets(a) for strings in C programming?","datePublished":"2022-11-06T13:21:49+00:00","mainEntityOfPage":{"@id":"https:\/\/jassweb.com\/solved\/solved-what-is-the-difference-between-scanf-sa-scanfnsa-and-getsa-for-strings-in-c-programming\/"},"wordCount":312,"publisher":{"@id":"https:\/\/jassweb.com\/solved\/#organization"},"keywords":["c++","scanf"],"articleSection":["Solved"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/jassweb.com\/solved\/solved-what-is-the-difference-between-scanf-sa-scanfnsa-and-getsa-for-strings-in-c-programming\/","url":"https:\/\/jassweb.com\/solved\/solved-what-is-the-difference-between-scanf-sa-scanfnsa-and-getsa-for-strings-in-c-programming\/","name":"[Solved] What is the difference between scanf (\u201c%s\",a) scanf(\"%[^\\n]s\",a) and gets(a) for strings in C programming? - JassWeb","isPartOf":{"@id":"https:\/\/jassweb.com\/solved\/#website"},"datePublished":"2022-11-06T13:21:49+00:00","breadcrumb":{"@id":"https:\/\/jassweb.com\/solved\/solved-what-is-the-difference-between-scanf-sa-scanfnsa-and-getsa-for-strings-in-c-programming\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/jassweb.com\/solved\/solved-what-is-the-difference-between-scanf-sa-scanfnsa-and-getsa-for-strings-in-c-programming\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/jassweb.com\/solved\/solved-what-is-the-difference-between-scanf-sa-scanfnsa-and-getsa-for-strings-in-c-programming\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/jassweb.com\/solved\/"},{"@type":"ListItem","position":2,"name":"[Solved] What is the difference between scanf (\u201c%s&#8221;,a) scanf(&#8220;%[^\\n]s&#8221;,a) and gets(a) for strings in C programming?"}]},{"@type":"WebSite","@id":"https:\/\/jassweb.com\/solved\/#website","url":"https:\/\/jassweb.com\/solved\/","name":"JassWeb","description":"Build High-quality Websites","publisher":{"@id":"https:\/\/jassweb.com\/solved\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/jassweb.com\/solved\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/jassweb.com\/solved\/#organization","name":"Jass Web","url":"https:\/\/jassweb.com\/solved\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/jassweb.com\/solved\/#\/schema\/logo\/image\/","url":"https:\/\/jassweb.com\/wp-content\/uploads\/2021\/02\/jass-website-logo-1.png","contentUrl":"https:\/\/jassweb.com\/wp-content\/uploads\/2021\/02\/jass-website-logo-1.png","width":693,"height":132,"caption":"Jass Web"},"image":{"@id":"https:\/\/jassweb.com\/solved\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/jassweb.com\/solved\/#\/schema\/person\/65c9c7b7958150c0dc8371fa35dd7c31","name":"Kirat","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/jassweb.com\/solved\/#\/schema\/person\/image\/","url":"https:\/\/jassweb.com\/solved\/wp-content\/litespeed\/avatar\/1261af3c9451399fa1336d28b98ea3bb.jpg?ver=1776403586","contentUrl":"https:\/\/jassweb.com\/solved\/wp-content\/litespeed\/avatar\/1261af3c9451399fa1336d28b98ea3bb.jpg?ver=1776403586","caption":"Kirat"},"sameAs":["http:\/\/jassweb.com"],"url":"https:\/\/jassweb.com\/solved\/author\/jaspritsinghghumangmail-com\/"}]}},"_links":{"self":[{"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/posts\/19454","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/comments?post=19454"}],"version-history":[{"count":0,"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/posts\/19454\/revisions"}],"wp:attachment":[{"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/media?parent=19454"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/categories?post=19454"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/tags?post=19454"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}