C++文件输入输出
我正在尝试使用fgets和sscanf读取文件。在我的文件中,while的每一行上都有字符,我希望将其放入向量中。到目前为止,我有以下几点:C++文件输入输出,c++,pointers,file-io,C++,Pointers,File Io,我正在尝试使用fgets和sscanf读取文件。在我的文件中,while的每一行上都有字符,我希望将其放入向量中。到目前为止,我有以下几点: FILE *fp; fp = fopen(filename, "r"); if(!fp) { fprintf(stderr, "Unable to open file %s\n", filename); return 0; } // Read file int line_count = 0; char buffe
FILE *fp;
fp = fopen(filename, "r");
if(!fp)
{
fprintf(stderr, "Unable to open file %s\n", filename);
return 0;
}
// Read file
int line_count = 0;
char buffer[1024];
while(fgets(buffer, 1023, fp))
{
// Increment line counter
line_count++;
char *bufferp = buffer;
...
while(*bufferp != '\n')
{
char *tmp;
if(sscanf(bufferp, "%c", tmp) != 1)
{
fprintf(stderr, "Syntax error reading axiom on "
"line %d in file %s\n", line_count, filename);
return 0;
}
axiom.push_back(tmp);
printf("put %s in axiom vector\n", axiom[axiom.size()-1]);
// increment buffer pointer
bufferp++;
}
}
我的公理向量定义为向量公理;。当我运行我的程序时,我得到一个seg错误。它发生在我做sscanf的时候。有没有关于我做错了什么的建议?tmp是指针而不是数组,因此读取它会导致缓冲区溢出
首先,您应将tmp的减速度更改为:
然后,您应该记住在完成时释放axioms中的所有指针。tmp是指针而不是数组,因此读取它会导致缓冲区溢出
首先,您应将tmp的减速度更改为:
然后,您应该记住在完成后释放axioms中的所有指针。更安全的方法是使用std::string和std::vector
字符串类型处理文本的内存分配。另请参见getline和std::string::c_str。更安全的方法是使用std::string和std::vector
字符串类型处理文本的内存分配。请参阅GETLIN和STD::Stry::CyStr.< /P>如果您要采取使用STD::String的步骤,我衷心地建议您这样做,您也可能希望切换到文件I/O的C++ I/O类,即FFLAST。如果您要采取STD::String的步骤,我衷心地推荐您使用。您还可能希望切换到文件I/O的C++ I/O类,即FSRoad。
char *tmp = malloc(SOME_MAXIMUM_SIZE * sizeof(char));