【发布时间】:2017-12-03 11:41:29
【问题描述】:
我想编写一个程序,询问用户一些输入值并根据输入值给出结果。以下代码有效,但是当我输入“John”时,100 个内存中只使用了 4 个空格。其他96个被浪费了。此外,不能保证输入将小于 100 个字符(非常不可能但可能)。有没有办法优化这个?
P.S:当我研究它时,一些网站说我应该使用 sscanf() 或 fgets() 但我不明白如何在我的代码中使用它们。
P.P.S : 我对 C 很陌生,所以请告诉我最简单的方法。
#include <stdio.h>
int main()
{
char name[100];
printf("Your name: \n");
scanf("%100s", name);
printf("Name: %s \n", name);
return 0;
}
【问题讨论】:
-
我看到了那个讨论,但我不明白第一个答案是什么意思。看起来有点复杂。
-
简而言之,上面链接的答案读取用户输入一次一个字符,并为输入缓冲区使用动态内存分配,一次多分配 16 个字节随着输入字符数的增加,需要。如果您花时间逐行研究该答案并查找文档和所涉及函数的使用,您将学到一些关于 C 编程的知识。
-
scanf("%100s", name);--注意这应该是scanf("%99s", name);以避免缓冲区溢出。\0字符在使用%s时由scanf()自动写入;指定的最大宽度是输入项的最大长度,不包括空终止符。