繁体   English   中英

C-fscanf读取两个整数,然后读取字符串

[英]C - fscanf to read two ints and then strings

我需要在文本文件中存储两个整数,然后再存储文本行。 我已经通过在一行中写入每个int以及在一行中也写入了文本的每一行来成功完成了此操作。 为了阅读它,我发现了一些麻烦。 我正在这样做:

FILE *f = fopen(arquivo, "r");
char *lna = NULL;
fscanf(f, "%d\n%d\n", &maxCol, &maxLin);
//↑This reads the two ints, works fine in step-by-step
for (;;) {
    fscanf(f, "%s\n", &lna);
    //↑This sets lna to NULL always, even if there are more lines
    if (lna != NULL)
        lna[strlen(lna) - 1] = '\0';
    if (feof(f))
        break;
    inserirApos(lista, lna, &atual);
}
fclose(f);

我尝试了几种不同的方法,但是它们从未奏效。 我知道我可以读取诸如gets之类的所有字符串,但是如果字符串包含空格,我认为这是有问题的。 我想知道我的工作方式是否是最好的,这是怎么回事。 我发现这些方法之一(也没有用)必须传递每行的最大长度。 我知道这些信息是必要的,这是我之前阅读的maxCol。

fscanf(f, "%s\n", &lna);

参数类型错误。 %s格式期望使用char*作为参数,但是您给了它char** 而且您还没有为该指针分配内存。 fscanf期望一个char*指向足够大的内存区域。

char *lna = malloc(whatever_you_need);
...
    fscanf("%s ", lna);

fscanf格式中的'\\n'' '之间没有区别。两者都消耗了int lna扫描的非空白字符字符串之后的整个空白。)

您需要首先为lna分配空间。

char *lna = malloc(MAX_SIZE);//MAX_SIZE is the maximum size the string can be + 1 

附加参数应指向格式字符串中由其对应的格式说明符指定的类型的已分配对象。

您似乎期望fscanf()为您动态分配字符串。 这根本不是怎么回事。 这是未定义的行为。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM