将行从文本文件读入字符串的指针数组。

保罗·雷德林

我已经遍历Stack Exchange了,而且还没有看到任何线程可以回答我的问题,但是如果我错过了,请把我引到一个线程中。

我正在使用C。

因此,我有一个文本文件,其中前九行是标签(带有空格),其后的每一行是与这些标签相对应的九段数据。我已经声明了一个指针数组:

char * cp_labels[9];

我正在尝试将文本文件中的前9行读入数组的每个元素。

文本文件如下所示:

Et jet 1
Et jet 2
Et jet 3
Eta 1
Eta 2
Eta 3
Met
Ht
Njet
(double) (double) (double) (double) (double) (double) (double) (double) (double)
(double) (double) (double) (double) (double) (double) (double) (double) (double)
(double) (double) (double) (double) (double) (double) (double) (double) (double)
...

等等。现在,我只是想确保字符串正确存储在数组中。我正在与此:

#include<stdio.h>
#include<stdlib.h>
#include<math.h>

int main ()
{
  FILE *fp_data;
  fp_data = fopen("data.dat", "r");
  char *cp_labels[9];

  for (int l=0;l<9;l++)
    {
      fscanf(fp_data, "%s", cp_labels[l]);

      printf("%s\n", cp_labels[1]);
    }

  return 0;
}

我遇到的问题是

fscanf

正在将每个字符串都视为一个字符串(应该如此),而我正在尝试使其将每一行都视为一个字符串。

fgets 

是我知道的一个选项,但是我似乎无法使它与字符串指针数组一起使用。有任何想法吗?我这样做是因为我希望以后可以将此数组的元素用作标签。

乔纳森·勒夫勒(Jonathan Leffler)

这段代码可以完成这项工作:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(void)
{
    const char filename[] = "data.dat";
    FILE *fp = fopen(filename, "r");
    if (fp == 0)
    {
        fprintf(stderr, "Failed to open file %s for reading\n", filename);
        return 1;
    }

    char *cp_labels[9];
    char buffer[4096];

    for (int i = 0; i < 9 && fgets(buffer, sizeof(buffer), fp) != 0; i++)
    {
        buffer[strcspn(buffer, "\n")] = '\0';
        cp_labels[i] = strdup(buffer);
    }

    for (int i = 0; i < 9; i++)
        printf("%d: [%s]\n", i, cp_labels[i]);

    for (int i = 0; i < 9; i++)
        free(cp_labels[i]);

    fclose(fp);
    return 0;
}

样本输出(来自您的数据文件):

0: [Et jet 1]
1: [Et jet 2]
2: [Et jet 3]
3: [Eta 1]
4: [Eta 2]
5: [Eta 3]
6: [Met]
7: [Ht]
8: [Njet]

这样fgets()做是因为它易于使用且正确无误。使用getline()同样容易:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(void)
{
    const char filename[] = "data.dat";
    FILE *fp = fopen(filename, "r");
    if (fp == 0)
    {
        fprintf(stderr, "Failed to open file %s for reading\n", filename);
        return 1;
    }

    char *cp_labels[9];
    char *buffer = 0;
    size_t buflen = 0;

    for (int i = 0; i < 9 && getline(&buffer, &buflen, fp) != -1; i++)
    {
        buffer[strcspn(buffer, "\n")] = '\0';
        cp_labels[i] = buffer;
        buffer = 0;
        buflen = 0;
    }
    free(buffer);

    for (int i = 0; i < 9; i++)
        printf("%d: [%s]\n", i, cp_labels[i]);

    for (int i = 0; i < 9; i++)
        free(cp_labels[i]);

    fclose(fp);
    return 0;
}

产生相同的输出。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将文本文件读入字符串数组

来自分类Dev

将文本文件读入字符串

来自分类Dev

C-如何将文本文件中的单词读入字符串数组

来自分类Dev

从Matlab到Python的转换:将文本文件读入numpy记录并在数组中搜索字符串

来自分类Dev

将文本文件读入数组

来自分类Dev

无法将土耳其语字符从文本文件读取到字符串数组

来自分类Dev

Swift文本文件到字符串数组

来自分类Dev

C ++从文本文件获取数组字符串

来自分类Dev

从文本文件加载字符串数组

来自分类Dev

C ++从文本文件获取数组字符串

来自分类Dev

将文本文件批量拆分为出现字符串的文本文件

来自分类Dev

将字符串写入文本文件

来自分类Dev

如何将文本文件放入字符串数组?

来自分类Dev

Java将字符串数组插入文本文件

来自分类Dev

将文本文件中的url添加到字符串数组(Android)

来自分类Dev

从文本文件将字符串读取到向量数组中的Char错误C ++

来自分类Dev

将文本文件中的字符串转换为Powershell中的数组

来自分类Dev

如何将多个文本文件中的字符串添加到数组

来自分类Dev

如何读入字符串数据并计算文本文件中数字的总和

来自分类Dev

将数据从文本文件读入VBA数组

来自分类Dev

将文本文件读入char数组

来自分类Dev

将多节文本文件读入多个数组

来自分类Dev

如何将文本文件读入对象数组

来自分类Dev

将本地文本文件读入JavaScript数组

来自分类Dev

Python将文本文件读入单词数组

来自分类Dev

将文本文件读入Typescript中的对象数组

来自分类Dev

将整数从文本文件读入数组的最佳方法

来自分类Dev

将文本文件读入2D数组

来自分类Dev

将数字从文本文件读入数组

Related 相关文章

热门标签

归档