使用C ++,我正在使用fgets将文本文件读入char数组,现在我想获得此array.i.e中每个元素的索引。 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++;
}
由于
答案 0 :(得分:0)
readElement看起来误报了。只需将其声明为指向字符串开头的指针:
char* readElement = NULL;
你也没有检查fopen的返回值。这是最可能的问题。因此,如果文件实际上没有打开,那么当你将它传递给printf时,“line”就是垃圾。
如果你真的想将该行的每个元素存储到一个数组中,你需要为它分配内存。
另外,不要将变量命名为“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);
}