c语言-C语言中的fgets问题,结果输出多出一行“(null)”

问题描述

C语言中的fgets问题,结果输出多出一行“(null)”

#include "stdio.h"
#include "stdlib.h"
#include "string.h"
char* main01()
{
//写文件操作
char* FileName="c:/1.txt";
char ch[]="nr";
FILE* fp=NULL;
fp=fopen(FileName,"wb");
if(fp == NULL)
{
printf("open file error:n");
}
fputc('c',fp); //写一个字符
fputs("abcdefg",fp);//写一个字符串

fwrite(ch,2,1,fp); //写入时换行
fprintf(fp,"nr"); //写入时换行
fputs("hijklmnn",fp);
fclose(fp);
return FileName;

}

void main03(char* file_name)
{
//fgets读文件操作
char* FileName=file_name;
char buf[100];
FILE* fp=NULL;
fp=fopen(FileName,"r");
if(fp == NULL)
{
printf("Open file error:n");
}
while( !feof(fp))
{
printf("%s",fgets(buf,100,fp));
}
fclose(fp);
system("pause");
}

void main()
{
char* File_Name=main01();
main03(File_Name);
system("pause");
}

运行结果:
cabcdefg

hijklmn
(null)请按任意键继续. . .

(null)是指什么意思?我再文件里没有写入“(null)”

解决方案

哦,知道了。原来是fputs会自动增加一个换行符,所以,导致文件指针读取该空白行时会多出一个(null)

解决方案二:

fputs("hijklmn",fp);你这句话里面给你写了个换行符,把换行符去掉fputs("hijklm",fp);

时间: 2024-08-02 23:09:45

c语言-C语言中的fgets问题,结果输出多出一行“(null)”的相关文章

c语言-C语言中Free函数释放内存为何释放不了!!!!!!!

问题描述 C语言中Free函数释放内存为何释放不了!!!!!!! #include #include void testFree(char *par) { void*free(par); par = NULL; } int _tmain(int argc, _TCHAR* argv[]) { char path[10] = {"abc"}; char *str = (char *) malloc(100 *sizeof(char)); memset(str,0x00,100 *size

c语言-C语言中的float数据类型

问题描述 C语言中的float数据类型 C语言中的float数据用32位存储,其中有6位为小数位,那么小数点后的值应该不超过2^6-1,而实际上却是保留小数点后6位,这是怎么回事? 解决方案 你的问题本身就不对,float的位数精度是23位,也就是1/2^23,折算成10进制,在1/10^6.x,为了不丢失最后的那一点精度,所以用7位表示尾数而不是6位.http://blog.csdn.net/dxy612/article/details/5518477 解决方案二: 首先我的观点同上,补充一点

c语言-C语言中的rand()函数的问题

问题描述 C语言中的rand()函数的问题 代码如下,为什么a总是输出0,而b却能正常输出?rand()的返回值不是在0~RAND_MAX之间的整数吗? #include <stdlib.h> #include int main (void) { int a; int b; int i; for (i=0;i<5;i++) { a=10*rand()/RAND_MAX; printf ("a=%dn",a); } for (i=0;i<5;i++) { b=10

c语言-C语言中for循环怎么立即跳出,里面有延时

问题描述 C语言中for循环怎么立即跳出,里面有延时 解决方案 你可以把Tms500写成 while (i < 50 && Key_Scan(...) != KEY_ON) { Tms(10); } 解决方案二: 其实你的延时函数或许也是for循环,你可以在最小的循环体加入状态的查询就可以用break跳出了

c语言-C语言中A文件定义的文件指针,如何才能在B文件中也可以写入信息

问题描述 C语言中A文件定义的文件指针,如何才能在B文件中也可以写入信息 image.c和rtp.c都不是主函数,在image.c中定义了一个文件指针,但我想把rtp.c中的信息写入这个文件.简单就是在A文件中定义了一个指针文件,想把B文件中的信息写入指针文件.你可能问我为什么不直在B文件中定义,因为也要写入A文件中信息,像我之前写的运行时会提示rtp.c中的文件指针是未定义的标识符. 应该怎么写才是正确,麻烦知道的人给点指导,谢谢 解决方案 通过extern在rtp.c中声明该文件指针为外部指

c语言-C语言中goto的标志,后面必须要有可执行语句吗

问题描述 C语言中goto的标志,后面必须要有可执行语句吗 这个图中START:放到了程序的最后,当程序执行到这里的时候就跳出这个函数了,但是当我只放这一个标志的时候,编译是出错的,然后加了一句printf,就可以了,goto是这样的吗 解决方案 标号必须后面有语句,标号代表语句的地址. 解决方案二: 可以让目标地址那里是一个空语句

c语言-C语言中float类型浮点数

问题描述 C语言中float类型浮点数 请问C语言中float类型浮点数的阶码为什么要使用移码表示,这样表示的优点是什么? 解决方案 浮点数的表示中为什么要用移码表示阶码? 解决方案二: 如果阶码(指数)也用补码来表示,就会使得一个浮点数中出现两个符号位:浮点数自身的和浮点数指数部分的.这样的结果是,在比较两个浮点数大小时,无法像比较整数时一样使用简单的无逻辑的二进制比较. http://www.zhihu.com/question/24115452 解决方案三: 因为浮点数正负之分啊

c语言-C语言中,关于printf的问题!

问题描述 C语言中,关于printf的问题! 程序如下,为什么打印p时候值是不确定的?我知道正确的写法是 * p,但是我想知道 直接打印p为什么不报错,也没警告,但是值却不确定? #include <stdio.h> int main() { int a =8; int *p = &a printf("%dn",p); } 解决方案 printf("%dn",p) 代表指针p所指向的变量的地址值,所以不报错,你输出的是整型变量a的地址值,要想输出

编程c语言-CC语言中的main函数中的参数

问题描述 CC语言中的main函数中的参数 就是int argc char *argv[ ] 这个是什么意思,怎么样进行传参的,求大神指点迷津... 解决方案 C编译器允许main()函数没有参数,或者有两个参数(有些实现允许更多的参数,但这只是对标准的扩展).这两个参数,一个是int类型,一个是字符串类型.第一个参数是命令行中的字符串数.按照惯例(但不是必须的),这个int参数被称为argc(argument count).大家或许现在才明白这个形参为什么要取这么个奇怪的名字吧,呵呵!至于英文