大家好,欢迎来到IT知识分享网。
一、fputs()函数
fputs函数的功能是向指定的文件写入一个字符串,其调用形式为: fputs(字符串,文件指针) 其中字符串可以是字符串常量,也可以是字符数组名, 或指针 变量,例如:
fputs(“abcd“,fp);
其意义是把字符串“abcd”写入fp所指的文件之中。[例10.5]在例10.2中建立的文件string中追加一个字符串。
include
main()
{
FILE *fp;
char ch,st[20];
if((fp=fopen(“string”,”at+”))==NULL)
{
printf(“Cannot open file strike any key exit!”);
getch();
exit(1);
}
printf(“input a string:/n”);
scanf(“%s”,st);
fputs(st,fp);
rewind(fp);
ch=fgetc(fp);
while(ch!=EOF)
{
putchar(ch);
ch=fgetc(fp);
}
printf(“/n”);
fclose(fp);
}
本例要求在string文件末加写字符串,因此,在程序第6行以追加读写文本文件的方式打开文件string 。 然后输入字符串, 并用fputs函数把该串写入文件string。在程序15行用rewind函数把文件内部位置指针移到文件首。 再进入循环逐个显示当前文件中的全部内容。
二、puts()函数和fputs()函数的区别
与 gets 函数一样,对于 puts 函数,同样建议使用 fputs 函数来代替 puts 函数。如下面的示例代码所示:
int main(void)
{
char buffer[11];
fgets(buffer,11,stdin);
fputs(buffer,stdout);
return 0;
}
其中,puts 函数的原型如下所示:
int puts(const char *str);
我们知道,puts 函数主要用于向标准输出设备(屏幕)写入字符串并换行,即自动写一个换行符(’\n’)到标准输出。理论上,该函数的作用与“printf(“%s\n”,str);”语句相同。但是,puts 函数只能输出字符串,不能进行相关的格式变换。与此同时,它需要遇到 null(’\0’) 字符才停止输出。因此,非字符串或无 null(’\0’) 字符的字符数组最好不要使用该函数打印,否则无法正常结束。如下面的代码所示:
int main(void)
{
char str[] = {‘H’,’E’,’L’,’L’,’O’};
puts(str);
return 0;
}
在上面的示例代码中,因为字符数组 str 在结尾处缺少一个 null(’\0’) 字符(也就是说它不是一个严格意义上的字符串)。因此,在调用 puts 函数的时候,程序将不知道什么时候停止输出,从而导致输出结果未定义。运行结果如下图所示:
HELLO烫烫烫烫烫烫烫烫?口崄?
正确的做法是应该在字符数组 str 的结尾处添加一个 null(’\0’) 字符,如下面的示例代码所示:
char str[] = {‘H’,’E’,’L’,’L’,’O’,’\0′};
fputs 函数
函数的函数原型如下所示:
int fputs(const char *str, FILE *stream);
相对于 puts 函数,fputs 函数用来向指定的文件写入一个字符串(不换行)。当然,也可以使用 stdout 作为参数进行输出显示(它同样需要遇到 null(’\0’) 字符才停止输出),如下面的代码所示:
int main(void)
{
char str[] = {‘H’,’E’,’L’,’L’,’O’,’\0′};
fputs(str,stdout);
return 0;
}
运行结果如下:
HELLO
fputs主要功能
当然,fputs 函数主要用于对指定文件进行写入操作,如下面的示例代码所示:
int main(void)
{
FILE *fp=NULL;
fp=fopen(“myfile.txt”,”wb”);
if(fp == NULL)
{
printf(“不能够访问该文件.\n”);
exit(1);
}
fputs(“this is a test”, fp);
fclose(fp);
fp=NULL;
return 0;
}
运行上面的示例代码,文件“myfile.txt”会被写入一行“this is a test”字符串。
与 fgetws 一样,C99 同样也提供了 fputs 函数的宽字符版本 fputws,其函数的一般原型如下面的代码所示:
int fputws(const wchar_t * restrict s, FILE * restrict stream);
参考书籍《C Primer Plus》(第六版中文版)
相关习题
1.设计并测试一个函数,从一行输入中把一个单词读入一个数组中,并丢弃输入行的其余字符。该函数应该跳过第一个非空白字符前面的所有空白。将一个单词定义为没有空白、制表符或换行符的字符序列。
运行结果如下:
2.设计并测试一个函数,它类似于编程练习1的描述,只不过他通过第二个参数指明可以读取的最大字符数。
运行结果如下:
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/29859.html