我正在尝试读取文件并将文件内容分配到向量向量(矩阵)。 问题是它似乎没有做我需要它。 我也不太熟悉矢量,所以请原谅任何明显的错误:P
#include <stdio.h>
#include <vector>
#include <string.h>
void readfile(const char* filename,
std::vector< std::vector<float> >& output)
{
std::vector<float> vec123(3);
char buff[80];
FILE* myfile;
myfile = fopen(filename, "r");
while(fgets(buff, sizeof(buff), myfile) != NULL) {
sscanf(buff, "%f %f %f", vec123[0], vec123[1], vec123[2]);
output.push_back(vec123);
}
fclose(myfile);
}
这是我的主要内容:
int main() //yes, stdio.h, vector, "readfile" and string were included
{
std::vector< std::vector<float> > myvec;
readfile("myfile.txt", myvec); //file exists in my folder, valid
printf("%f\n", myvec[2][2]); //valid numbers for the file I'm reading
return 0;
}
问题是,如果它没有给myvec分配任何内容,printf会发生段错误,但它确实会分配myvec,因为无论我从它请求什么有效对象,它都会打印出一个零浮点数。我知道一个简单的方法来做到这一点,没有2D矢量麻烦,但遗憾的是我的数学库是针对矩阵优化的。 myfile包含类似“2.2 3.14159 1.0换行符9.3 2.2 2.2换行符......”
答案 0 :(得分:1)
应该是:
sscanf(buff, "%f %f %f", &vec123[0], &vec123[1], &vec123[2]);
因为sscanf
将指针作为参数。