这是我。我不明白为什么这个getline()返回1而不是不返回读取的字符。
#include<stdio.h>
#include<stdlib.h>
int main(int argc, char *argv[])
{
FILE *fp;
if (argc!=3)
{
printf("improper number of input\n");
exit(1);
}
size_t len=0;
ssize_t read;
char *line=NULL;
fp=fopen(argv[1],"r");
if (fp==NULL)
{
printf("file is empty\n");
exit(EXIT_FAILURE);
}
while (read=getline(&line, &len, fp)!=-1)
{
printf("retrieved line length %zu \n",read );
//printf("%s\n",line );
}
fclose(fp);
free(line);
}
这是我的输出。
retrieved line length 1
我使用了http://man7.org/linux/man-pages/man3/getline.3.html
所述的getline()我的文件包含以下文本:
孟加拉国的官方语言和事实上的国家语言是现代标准孟加拉语(孟加拉语文学)。[6] [7] [8] [9]它是该国的通用语言,孟加拉国98%的人说流利的孟加拉语(包括方言)是他们的母语。[10] [11]在印度,孟加拉语是西孟加拉邦,特里普拉邦和阿萨姆邦巴拉克谷地的官方语言。阿萨姆邦雅鲁藏布江谷的不同地区也使用这种语言。它也是孟加拉湾安达曼群岛和尼科巴群岛上使用最广泛的语言,[12]并且在贾坎德邦,比哈尔邦,米佐拉姆邦,梅加拉亚邦和奥里萨邦等其他州的重要少数民族也使用。孟加拉语在全球共有大约250–3亿人,[13]按人口计算,孟加拉语通常被认为是世界第七大母语。
答案 0 :(得分:3)
由于!=
的绑定强度大于=
,因此您需要使用括号:
while((read=getline(&line, &len, fp)) != -1)
您基本上将比较结果分配给read
,如果计算结果为true,则为1
,否则为0
。