#include<stdio.h>
#include<stdlib.h>
main()
{
FILE *fp;
char *lineptr = NULL;
size_t len;
size_t read;
fp = fopen("test.txt","r");
if(NULL == fp)
{
exit(1);
}
while((read=getdelim(&lineptr,&len,33,fp))!= -1)
{
printf("%s",lineptr);
}
free(lineptr);
}
我在test.txt中写过
before giving tab !after tab has been given
我已经定了!作为分隔符,但我没有看到getdelim中的getline和getdelim之间的任何区别我可以设置分隔符但是在getline的情况下它是换行符,我希望o / p是
before giving tab
after tab has been given
!应该作为分隔符如何使用getdelim
来做到这一点答案 0 :(得分:5)
这未经过测试,但尝试更改printf行,因此您可以看到差异:
printf("%s\n",lineptr);
答案 1 :(得分:3)
它正是你所想的那样,只是它打印的第一个字符串是
before giving tab !
没有新行,后跟after tab has been given
将您的打印更改为
printf("%s\n",lineptr);
答案 2 :(得分:1)
它工作得很好(并根据您的要求划分'!');唯一的问题是你在一个while循环中正好打印出各个字符串。
请记住:getdelim包含字符串中的分隔符(它不会为您删除'!')。
对于给定的测试用例,第一次循环将给出字符串"before giving tab !"
,第二次循环将给出字符串"after tab has been given"
。您正在打印它们而没有任何换行符或任何内容,因此您的输出看起来与输入相同。我建议你在每个字符串后打印一个换行符,但这不会消除'!'。因此,您可能希望将打印代码更改为:
while((read=getdelim(&lineptr,&len,33,fp))!= -1)
{
if (lineptr[strlen(lineptr)-1] == '!')
lineptr[strlen(lineptr)-1] = '\0';
printf("%s\n",lineptr);
}
答案 3 :(得分:0)
char before[256], after[256];
fscanf(fp, "%255[^!]!%255[^\n]", before, after);
printf("%s\n%s", before, after);
答案 4 :(得分:0)
请参阅man getdelim
。 delim包含在字符串中,后跟一个空字符。如果你想打印一个后跟EOL的字符串,puts是最快的方法。
puts(lineptr);
如果你还想删除delim'!',请在puts之前添加。
lineptr[read - 1] = 0;