این دو تابع این امکان را فراهم می‌سازند که بتوان رشته‌هایی از کاراکترها را از طریق کنسول خواند یا در خروجی نوشت (دستگاههای ورودی و خروجی استاندارد را کنسول نامند که در مورد ریزکامپیوترها معمولاً صفحه‌‌‌کلید ورودی استاندارد و مانیتور خروجی استاندارد را تشکیل می‌دهند).
تابع gets() یک رشته از کاراکترها را که از طریق صفحه‌‌کلید وارد می‌شود، می‌خواند و آنها را در آدرسی قرار می‌دهد که با آرگومانهای آن تعیین شده است و اشاره‌گری کاراکتری است. کاراکترهای رشته مورد نظر را تایپ می‌کنید و در پایان، کلید Enter را می‌زنید. با این عمل به طور خودکار کاراکتر null یا ’’ نیز در پایان رشته قرار می‌گیرد. در اینجا اگر کاراکتری اشتباه تایپ شود، می‌توان آن را قبل از فشردن کلید Enter با استفاده از کلید backspace تصحیح کرد. در واقع در اینجا نیز کاراکترهای تایپ شده در بافر می‌ماند و تا موقعی که کلید برگشت فشرده نشده است در اختیار برنامه قرار نمی‌گیرد.
تابع puts() آرگومانهای رشته‌ای خود را به صفحه نمایش می‌فرستند و سپس قلم نوشتار به خط جدید انتقال می‌یابد.
 مثال ۳ـ۱۷ برنامه زیر رشته‌ای را از طریق صفحه‌‌کلید می‌خواند و در آرایه line قرار می‌دهد. سپس آن را روی خروجی نمایش می‌دهد.
#include<stdio.h>
main()
{
char line[80] ;
gets(line) ;
puts(line) ;
}
فراخوانی تابع puts در مقایسه با فراخوانی printf دارای overhead کمتری است و درنتیجه سریع‌تر از آن عمل می‌کند زیرا تابع puts فقط یک رشته از کاراکتر را به خروجی می‌فرستد و نمی‌تواند مشابه printf تبدیل فرمت انجام دهد. همچنین نمی‌تواند مقادیر عددی را به عنوان خروجی داشته باشد. بنابراین چون puts فضای کمتری می‌گیرد و سریع‌تر از printf اجرا می‌گردد، هنگامی که در برنامه‌سازی حالت خیلی بهینه مورد نظر باشد، از این تابع استفاده می‌شود.