为了将数组插入另一个数组,可以做些什么。我碰巧有一个我正在循环的文件,所以我的目标是将文件中的每一行放入一个数组(一个行数组)。每行都有一些与学生及其测试结果相关的数据,例如:
Mark Zuckerberg 10.0 5.5 9.7
比尔盖茨10.0 1.5 6.7
示例代码:
FILE* file;
char buffer[256];
char arrayOfLines[500];
char line[256];
file= fopen("I:\\students.txt","r+");
/* Helps to iterate through each line */
while (fgets(buffer, sizeof(buffer), file)) {
//some logic to-be-coded
line = buffer; // just an idea does not work
arrayOfLines[i] = line; // just an idea does not work
}
预期结果:
arrayOfLines [] = {"马克扎克伯格10.0 5.5 9.7","比尔盖茨10.0 1.5 6.7" };
我当然知道这在某种程度上很容易实现,但是在使用java很长一段时间之后结果有点棘手,有人可以帮我解决这个问题吗? 在迭代和阅读方面,一切都运行得很好。但是,当谈到"播放"每条线都令人毛骨悚然。也许我需要改变我的方法,欢迎任何帮助。
答案 0 :(得分:2)
当您尝试分配它们时,数组名称会衰减为指针。要将buffer
的内容复制到另一个char[]
变量,您必须使用memcpy
,strcpy
或strncpy
除此之外,你做的arrayOfLines
变量存在问题。它不是一系列线条。这是一个500个字符的数组,所以它甚至不足以容纳2行,你需要的是:
char array_of_lines[500][256];
要复制数据,我会使用:
memcpy(aray_of_lines[i], buffer, sizeof buffer);//where `i` is the current line, starting at 0
这里可能值得研究malloc
- 这里的行数组,因为这段代码需要128,000字节的堆栈空间才可用,只是为了容纳array_of_lines
数组,所以我想写:
char *array_of_lines[500];
//in the loop:
array_of_lines[i] = malloc(strlen(buffer) + 1);
//check for NULL, and all that
strncpy(array_of_lines[i], buffer, strlen(buffer));
答案 1 :(得分:1)
#include <stdio.h>
#include <string.h>
int main( void ){
FILE *file = fopen("I:\\students.txt","r");
char buffer[256*500];
char *arrayOfLines[500];
char *line = buffer;
size_t buf_siz = sizeof(buffer);
int i=0, n;
while (fgets(line, buf_siz, file)) {
char *p = strchr(line, '\n');
if(p)
*p = '\0';//remove newline
else
p = strchr(line, '\0');
arrayOfLines[i++] = line;
buf_siz -= p - line + 1;
if(p + 1 == buffer + sizeof(buffer))
break;//buffer full!
line = p + 1;
}
fclose(file);
n = i;
for(i=0; i<n; ++i)
puts(arrayOfLines[i]);
return 0;
}