繁体   English   中英

将字符串数组保存到 C 中的文件的问题

[英]problem saving an array of strings to a file in C

以下代码应该将 my_data[] 保存到名为 data.txt 的文件中。 但是它只保存第一个元素。 在这种情况下,单词“this”。 我真正想做的是以其他程序可以使用标准数组挖掘术语访问任何单个元素的方式保存整个多维数组。 PS 我确定 .txt 文件不是理想的文件格式,什么是?

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

int main()
{

    char my_data[2][2] = {"this","is","a" ,"test"};
    char path[] = "C:\\Users\\dave\\Documents\\data.txt";        
    
      FILE *fp ;

          if ((fp = fopen(path,"w+")) == NULL)
                {
                printf("cannot open file");
                exit(1);
                }

      fwrite(my_data, sizeof(char), sizeof(my_data), fp);

      rewind(fp);

      fclose(fp);

}

您必须正确设置数组,然后使用for循环遍历数组中的每个单独字符串。

例如:

int count = 12

char* months[] = {
  "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
};  

for (int i = 0; i < count; i++)
{
  printf("%s\n", months[i]);
}

您可能无法为此使用sizeof ,因为每个字符串的长度可能不同。

看看这个:

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

int main()
{
  char my_data[4][5] = { "this","is","a" ,"test" };
  // 4: because we have 4 strings
  // 5: because the longest string is 4 letters and +1 for the NUL string terminator
  char path[] = "data.txt";

  printf("Content of my_data\n");
  for (int i = 0; i < 4; i++)
    printf("read_data[][i] = %s\n", my_data[i]);

  FILE* fp;

  if ((fp = fopen(path, "wb")) == NULL)
  {
    printf("cannot open file");
    exit(1);
  }

  int byteswritten = fwrite(my_data, sizeof(char), sizeof(my_data), fp);
  fclose(fp);
  printf("%d bytes written\n", byteswritten);

  char read_data[4][5];

  if ((fp = fopen(path, "rb")) == NULL)
  {
    printf("cannot open file");
    exit(1);
  }

  int bytesread = fread(read_data, sizeof(char), sizeof(read_data), fp);
  printf("%d bytes read\n", byteswritten);

  printf("Content of read_data\n");
  for (int i = 0; i < 4; i++)
    printf("read_data[][i] = %s\n", read_data[i]);

  fclose(fp);
}

该程序将my_data的原始字节写入data.txt文件(BTW 不是文本文件)。

然后它将这些相同的原始字节读入read_data ,它的声明方式与my_data 如果读取部分在其他程序中,这也适用。

这仅在my_dataread_data声明的大小完全相同时才有效。

暂无
暂无

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

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