读书人

linux停fgets到的字符串去掉换行符

发布时间: 2013-04-07 12:50:11 作者: rapoo

linux下fgets到的字符串去掉换行符
代码如下,报段错误了,帮看下,哪里有错误。。。。



#include <stdio.h>
#include <string.h>
#include <stdlib.h>

//思路把\n去掉,最后最后一行不含\n
int del_str_line(char *str)
{
char *p = str;
while('\n' != *p)
{
p++;
if(*p = '\0') //最后一行EOF不包含\n
return 0;
}
*p = '\0';

return 0;
}

int main()
{
FILE *fp;
char str_line[100];
char *p;
fp = fopen("filename","rb");
if (NULL == fp)
{
puts("open profile error,exit");
exit(1);
}

while(!feof(fp))
{
fgets(str_line,1000,fp);
//去掉换行符
del_str_line(str_line);
puts(str_line);
}

}

[解决办法]
每一次IO之后都要坚持流的状态

fgets(str_line,1000,fp);
//请检查状态


#include <stdio.h>
#include <string.h>
#include <stdlib.h>

//思路把\n去掉,最后最后一行不含\n
int del_str_line(char *str)
{
char ch;
while('\n' != *str && *str)
{
++str;
}
*str = '\0';
return 0;
}

int main()
{
FILE *fp;
char str_line[100];
char *p;
//fp = fopen("filename","rb");
fp = fopen("main.cpp","r");
if (NULL == fp)
{
puts("open profile error,exit");
exit(1);
}

while(fgets(str_line,1000,fp))
{
//去掉换行符
del_str_line(str_line);
puts(str_line);
}
}


[解决办法]
while(!feof(fp))

没有read之前,FILE是不会被标记为eof的,因为谁也不知道文件到末尾了。
[解决办法]
引用:
while(!feof(fp))

没有read之前,FILE是不会被标记为eof的,因为谁也不知道文件到末尾了。


++

读书人网 >C语言

热点推荐