【问题标题】:Read text from file, store lines in arrray从文件中读取文本,将行存储在数组中
【发布时间】:2023-03-14 15:05:02
【问题描述】:

这是我的代码。它当前从文本文件中读取,一次一行。我使用 strcpy 将每一行存储到数组“行”中。我的问题是,我如何打印出这个数组的一个元素?目前这段代码可以编译运行,但是没有输出。

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

int main()
{
    FILE *ptr_file;
    char buf[1000];
    char lines[10][500];

    //num of strings, length of strings
    char *pointertoarray = lines[0];

    ptr_file =fopen("d1.txt","r");

    fgets(buf,1000, ptr_file)!=NULL;
    strcpy(buf, lines[0]);

    fgets(buf,1000, ptr_file)!=NULL;
    strcpy(buf, lines[1]);

    fclose(ptr_file);

    printf("%s", pointertoarray);

    return 0;
}   

【问题讨论】:

  • buf 大于lines 的元素是危险的,因为strcpy() 可能会溢出后者。
  • 理想情况下,您应该使用 malloc 动态分配所有内容。最近在 SO 上有几个类似的问题与此不一致。

标签: c file text


【解决方案1】:

这个:

strcpy(buf, lines[0]);

应该是:

strcpy(lines[0], buf);

要打印它,你可以这样做:

printf("%s\n", lines[0]);
printf("%s\n", lines[1]);

另外,您正在读取 1000 个字符的字符串并将其复制到 500 个字符的缓冲区中……这可能不太好。调整缓冲区以匹配大小或使用 strncpy 限制复制的字符数量,以免溢出。

在任何情况下,您都可能希望使用循环来读取行而不是硬编码。您可以使用 fgets 读取行并使用 malloc 为每个新行动态分配内存。它需要更多的工作,但最终会更好,因为它允许您读取行数未知的文件,而不必在读取多少行之前决定。

【讨论】:

    【解决方案2】:

    strcpy 的第一个参数是目标。想想“任务”

    【讨论】:

      【解决方案3】:

      您可能希望使用循环将其打印出来。下面将打印出数组的所有内容。在 C 中,您可以使用 forwhile 循环。

      您可能想在主目录之外定义数组的大小:

      #DEFINE SIZE1 1000;
      #DEFINE SIZE2 10;
      

      你可以说:

      int count = 0;
      int count2 = 0;
      for(count1 = 0; count1 < SIZE1; count1++)
      {
           for(count2 = 0; count2 < SIZE2; count2++)
          {
                printf("%c", lines[count2][count1]);
          }
             printf("\n");
      }
      

      【讨论】:

        猜你喜欢
        • 2020-02-09
        • 1970-01-01
        • 2013-11-19
        • 1970-01-01
        • 1970-01-01
        • 2021-06-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多