-1

使用 C++,我正在使用 fgets 将文本文件读入 char 数组,现在我想获取此数组中每个元素的索引。即 line[0]= 0.54 3.25 1.27 9.85,然后我想返回 line 的每个元素[0] 在一个单独的数组中,即 readElement[0] = 0.54。我的 text.txt 文件具有以下格式: 0.54 3.25 1.27 9.85 1.23 4.75 2.91 3.23 这是我编写的代码:

char line[200]; /* declare a char array */
char* readElement [];

read = fopen("text.txt", "r");
while (fgets(line,200,read)!=NULL){ /* reads one line at a time*/
printf ("%s print line\n",line[0]); // this generates an error

readElement [n]= strtok(line, " "); // Splits spaces between words in line
    while (readElement [1] != NULL)
  {
printf ("%s\n", readElement [1]); // this print the entire line not only element 1

  readElement [1] = strtok (NULL, " ");
  }
n++;
}

谢谢

4

1 回答 1

0

readElement 看起来声明错误。只需将其声明为指向字符串开头的指针:

char* readElement = NULL;

您也没有检查 fopen 的返回值。这是最有可能的问题。因此,如果文件实际上没有打开,当您将“line”传递给 printf 时,它就是垃圾。

如果你真的想把每行的每个元素存储到一个数组中,你需要为它分配内存。

另外,不要将变量命名为“read”。“read”也是低级函数的名称。

const size_t LINE_SIZE = 200;
char line[LINE_SIZE];
char* readElement = NULL;
FILE* filestream = NULL;

filestream = fopen("text.txt", "r");
if (filestream != NULL)
{
    while (fgets(line,LINE_SIZE,filestream) != NULL)
    {
        printf ("%s print line\n", line);

        readElement = strtok(line, " ");
        while (readElement != NULL)
        {
             printf ("%s\n", readElement);
             readElement = strtok (NULL, " ");    
        }
      }
    }
    fclose(filestream);
}
于 2012-04-22T06:46:01.410 回答