1. 字符串的输入和输出
char *str ;
gets(str); 接受一个字符串
puts(str);输出一个字符串。
2.如果字符串文字中间没空格或者是间隔的空格符,ANSI C会将其串联起来。
3.%p 格式产生的是一个地址。如果编译器不支持%p,可以使用%u和%lu代替。
4. 1) head 是一个 指针,heart是一个数组的首地址。 head =heart ,但是 heart = head 就是错误的。
2) 字符串和指针
#include <stdio.h>
int main(int argc, const char * argv[])
{
char * mesg = "dont do it ";
char *copy;
copy = mesg; //两个指针指向了同一个字符串。
printf("%s",copy);
printf("mesg = %s,&mesg = %p,value = %p \n",mesg,&mesg,mesg);
printf("copy = %s,© = %p,value = %p \n",copy,©,copy);
printf("Hello, World!\n");
return 0;
}
结果如下:
dont do it mesg = dont do it ,&mesg = 0x7fff5fbff8e8,value = 0x100000f0e
copy = dont do it ,© = 0x7fff5fbff8e0,value = 0x100000f0e
5.字符串输入 scanf(),gets(),fget()
1) gets()函数 :以回车符作为结束输入的标志。
char name[10];
gets(name); //warning: this program uses gets(), which is unsafe. 这是因为gets()接收的字符串很容易因为字符数组过小而导致数据溢出。
printf("%s",name)
2)fgets()函数:fgets(name,10,stdin);是为IO而设计的,在处理键盘输入的时候就不如gets()那么方便。
gets 和fgets 有三方面的不同。
i .fgets需要第二个参数说明最大读入的字节数。fgets最多可以读取n-1个字符或者读完一个换行符位置。有这两者中最先满足的那个来结束输入。
ii .fgets读取到换行符,就会把它存到字符串里面,而不是像gets那样丢弃。
iii .他还需要第三个参数来说明读哪一个文件,从键盘读数据的时候,可以使用stdin(standard input)作为该参数。
char name[10];
char *pt;
pt = fgets(name, 10, stdin);
printf("%s",name);
printf("nihao");
nihao
nihao //接收了那个换行符。
nihao
如果输入的字符串超过了max,则只会输入前10个。
char name[10];
char *pt;
int num = 0;
while(!feof(pt))
{
pt = fgets(name, 10, fp);
num++;
printf("%s\n",name);
}
printf("%d",num);
3)scanf()函数 %S来格式化输入。与gets的区别是:scanf是遇到空格结束,而gets是遇到回车符。
%10s 是scanf遇到第一个空白符或者是到达第十个字节便结束。
第一次输入都是满足5,10 的输入,所以完整输出。
第二次输入是5满足,但是10已经超,于是第二次输出的时候便只能输出10个
第三输入是第一次便溢出,于是便截断了第一个名字,第二个名字便没有输出。
根据所需输入的特点,用gets()从键盘读取文本可能更好,更容易更快。
scanf主要用于以某一种表中形式输入的混合类型数据的读取和转换。
例如:每一行输入都是包括一种工具的名称,库存数量和单价,用scanf。
如果希望每次只输入一个单词,最好使用scanf。
6.字符串输出 puts,fputs和printf。
1)puts()函数:只需要给出字符串参数的地址。
每一行字符串都单独显示。与printf()不同,puts显示字符串的时候自动在其后添加一个换行符。
puts(&str1[5])从str1的第六个字符开始输出。
puts(str2 + 4)
puts()的停止标志:遇到空字符就会停下来。
char dont1[] = {'A','o','A','!'};
char side_a[] = "sides A";
char side_b[] = "side B";
char dsont1[] = {'W','o','W','!'};
char dont[] = {'W','o','W','!'};
puts(dont);
运行结果:WoW!WoW!side B
关于堆和栈的问题。
2)fputs函数。 是面向文件的输出文本。
与puts的区别:
i, fputs需要第二个参数说明需要写得文件,可使用stdout(standrard output)作为参数进行输出显示。
ii, fputs 并不为输出添加换行符。
gets和puts配合使用,fputs和fgets配合使用。
3)printf函数。
7.自动以字符串输入和输出函数。
puts1.c //不添加换行。
void puts1(const char* str)
{
while(*str != '\0')
putchar(*str++); //跳转到下一个字符而非改变字符。
}
int main(int argc, const char * argv[])
{
char *str[10];
while (gets(str)) {
puts1(str);
puts("hello");
}
warning: this program uses gets(), which is unsafe.
lichan
lichanhello
puts输出:
char *str[10];
while (gets(str)) {
puts(str);
puts("hello");
}
warning: this program uses gets(), which is unsafe.
nihao
nihao
hello
本文介绍了C语言中字符串的输入输出方法,包括gets、fgets、scanf等输入函数的区别及使用场景,以及puts、fputs和printf的输出应用。通过示例对比了不同函数的特点,帮助读者理解如何选择合适的字符串处理方式。
1647

被折叠的 条评论
为什么被折叠?



