好用的扩展就是 scanf() 的“%ms”占位符。
介于 % 和 s 之间的 m 有 measure(测量)的含义,它可以测量输入字符串的长度,scanf() 根据字符串的长度分配内存,并将字符串拷贝到这段内存,之后将首地址返回给 m。在使用完毕后,需要调用 free() 函数释放这段内存。
程序源代码如下:
#include<stdio.h>
int length(char *p);
void main()
{
int len;
char *str[20];
printf("please input a string:\n");
scanf("%s",str);
len=length(str);
printf("the string has %d characters.",len);
}
int length(char *p)
{
int n;
n=0;
while(*p!='\0')
{
n++;
p++;
}
return n;
}
扩展资料
1、在C语言程序开发中需要读取用户输入时,即使不能事先获知输入长度,也是有办法写出高稳定性的程序的。不过在实践中,一般不推荐使用 scanf() 函数处理用户输入,即使我们解决了输入长度的问题。
2、介于 % 和 s 之间的数字应小于 name 的长度,这个数字表示 scanf() 一次最多读取 127 字节的数据放入 name。如果用户输入的字符串超出了 127 字节,剩下的字符将留在缓冲区内,等待下一次读取。
C语言中使用printf函数的输出字符串格式控制,可以很方便的将字符串按设计者要求进行输出。
格式说明:
printf("%[m][.n]s", str );
中括号,表示可选项,不是格式内容
m 输出最小宽度,单位字节,若str长度不足m,前补空格
.n 仅输出字符串str的前n位
参考代码:
#include<stdio.h>运行结果:
1234567890