1、读入字符串可以使用以下方法:
char str[20];
scanf("%s",str);
char str[20];
gets(str);
char str[20];
fgets(str,20,stdin);
char* str=readline(NULL);
...
free(str);
以上方法都可以用于从标准输入端读入字符串str。
2、区别一
gets()、scanf()、readline()这两个函数读入字符串时,当遇到换行符时都会作为字符串读入的终止,并且换行符'\n'不读入到字符串中。
fget()函数读入字符串时,当遇到换行符时也会作为字符串读入的终止,但是换行符'\n'会作为所读入字符串的一部分(除空字符'\0'之外的最后一个字符)。
3、区别二
scanf()函数遇到任意空白符(空格、换行、制表符)都会终止字符串读入,即用scanf()读入的行是不能包含空格的。
用gets()、fgets()和readline()读入的行都是可以包含空格的。
例如:
char str[20];
char str1[20];
char str2[20];
scanf("%s",str);
gets(str1);
fgets(str2,20,stdin);
printf("string from scanf is:%s\n",str);
printf("string from gets is:%s\n",str1);
printf("string from fgets is:%s\n",str2);
以上代码的执行结果将是(输入:test and data):
string from scanf is:test
string from gets is:test and data
string from fgets is:test and data(后面还有一个换行符)
4、区别三
fgets()在读入字符串放入字符数组时,读入的有效字符的个数是:用于存储该字符串的字符数组的长度-1。超过这个长度的字符会被忽略。
fscanf('%s',str);和gets();在读入字符串到某个字符数组时,有效字符串的长度并没有限制在字符数组的长度-1。具体最多能读入多少有效字符没有定义,可能跟系统和编译器都有关。
例如:
char str[6];
fgets(str);
printf("str=%s",str);
说明:以上代码的执行结果:当输入“testdata”时,输出结果是:str=testd,即字符串的长度最长是6-1=5。
5、关于readline()
readline(“input str:”);可以在接受标准输入时,在标准输出上打印”input str:“提示符。
str=readline(NULL);读入的字符串存放在readline函数内部malloc的内存中,所以不使用以后,要用free显式释放那段内存。
使用readline()函数的程序,在编译时需要加: -lreadline 和 -lncursed,否则会报错。