读书人

C语言有没有从文件中读取一起字符串的

发布时间: 2013-10-15 16:47:37 作者: rapoo

C语言有没有从文件中读取一行字符串的方法
C语言,用传统的方法,谢谢!

以换行符作为结尾,并记录行号。

把得到的字符串存放在char数组中。


[解决办法]
getline()
[解决办法]


ssize_t getline(char **lineptr, size_t *n, FILE *stream);


[解决办法]

getline有C++版本和linux下的C版本。
标准C函数:char *fgets(char *buf, int bufsize, FILE *stream);

[解决办法]
fgets()就可以

FILE *fp;
char str[256];
fgets(str, 256, fp);
意思为从fp中读一行,放入str中

记录行号的话,设定个量计数就行了
[解决办法]
fgets
可以
fscanf
更好[如果只需要获取行数 使用fscanf可以不考虑缓冲区大小的问题]
[解决办法]
fgets是符合C语言最好的方法。

引用:
C语言,用传统的方法,谢谢!

以换行符作为结尾,并记录行号。

把得到的字符串存放在char数组中。

[解决办法]
getline是C++的 6楼说的函数不错 不过似乎不能判断行
[解决办法]
仅供参考
#include <stdio.h>
#include <string.h>
#define MAXLEN 1000
char ln[MAXLEN];
FILE *f;
int i,z;
int b,n,L;
int main(int argc,char **argv) {
if (argc<2) {
printf("Usage:%s fullpathfilename.ext\nget total blank/non-blank/total linenumbers.\n",argv[0]);
return 1;
}
f=fopen(argv[1],"r");
if (NULL==f) {
printf("Can not open file [%s]!\n",argv[1]);
return 2;
}
z=0;
b=0;
n=0;
L=0;
while (1) {
if (NULL==fgets(ln,MAXLEN,f)) break;
L=strlen(ln);
if ('\n'==ln[L-1]) {
if (0==z) {
for (i=0;i<L-1;i++) {
if (!(' '==ln[i]
[解决办法]
'\t'==ln[i])) break;
}
if (i<L-1) z=1;//当前行不是空行
}
if (0==z) b++; else n++;
z=0;
} else {
if (0==z) {
for (i=0;i<L;i++) {
if (!(' '==ln[i]
[解决办法]
'\t'==ln[i])) break;
}
if (i<L) z=1;//当前行不是空行
}
}
}
fclose(f);
if (L>0 && '\n'!=ln[L-1]) {
if (0==z) b++; else n++;//最后一行末尾无'\n'也计算
}
printf("File:[%s] total blank/non-blank/total linenumbers is %d/%d/%d\n",argv[1],b,n,b+n);
return 0;
}

读书人网 >C语言

热点推荐