C - fscanf,格式问题

时间:2016-08-09 07:46:29

标签: c

我现在正在学习C并需要以下方面的帮助:

当文件的行格式如下时,我将文件作为输入:

file1.h: file3.sas,file7.txt,name.lll,..

file4.f: file6.kgl,...

...

我试图从每一行获取文件的名称(包括“.h / .something”)。

所以我读到了关于fscanf并尝试按如下方式使用它:

 fscanf(fpointer, "%[^:]", filesName);

 fscanf(fpointer, " %s", rest);

问题在于filesName“抓住了我想要的东西,然后抓住了”休息“,而rest始终没有抓住任何东西。

输入和输出示例:

使用以下行输入文件:

file1.h: gri.ad,adsd.eda

file2.h: da.ad,dads.da

输出:

filesName: file1.h 

rest: : 

filesName:  gri.ad,adsd.eda

file2.h 

rest: : 

filesName:  da.ad,dads.da 

rest: : 

我在哪里弄错了?

3 个答案:

答案 0 :(得分:2)

第一个fscanf读取文件名,第二个读取冒号(直到空白)。然后将“休息”作为下一个文件名的一部分读取。

试试这个

http://site url/_api/web/lists/GetByTitle(‘Test')

or

http://site url/_api/web/lists(guid'list GUID')

答案 1 :(得分:0)

如果你想读取文件中的所有文件名(我假设你真的想要这样做),请将读数打包成循环:

char buffer[256];
char c;
int result;
do
{
    result = fscanf(file, "%255[^,]%c", buffer, &c);
    if(result > 0)
    {
        printf("%s\n", buffer);
    }
}
while(result > 1);

请注意,我将缓冲区大小添加到package参数中,但不超过缓冲区大小(遗憾的是,不能像printf那样通过*传递大小...)。另外,我在逗号中明确地读取了逗号作为能够检测循环结束的字符(我使用了逗号,因为这是您在输入样本中发布的内容,如果需要则放回冒号...)。

答案 2 :(得分:0)

您的问题似乎是您的正则表达式

%s读取空格 - 空格/制表符/换行符,所以基本上发生的是你正在阅读:unincluded和%s得到:在itnstead内。

试试这个

fscanf(fpointer, "%[^:]", fileName); // get everything up to :

fgetc(fpointer); // get rid of :

fgetc(fpointer); // get rid of space

fscanf(fpointer, "%[^\n]", rest); // get the entire line

然而,在我看来,这似乎是一种非常不安全的解决方案,很容易受到抨击  阅读有关正则表达式和scanf的更多信息以找到更好的解决方案