【发布时间】:2018-12-30 12:15:58
【问题描述】:
我遇到了 sprintf 缓冲区的问题。 正如您在下面的代码中看到的那样,我正在使用 sprintf 将 char 数组保存到缓冲区,因此 pFile 可以检查文件夹中是否有类似名称的文件。如果找到,则将缓冲区值分配给 timecycles[numCycles],并增加 numCycles。示例:timecycles[0] = "timecyc1.dat"。它运行良好,正如您在控制台输出中看到的那样,它识别出文件夹中只有 timecyc1.dat 和 timecyc5.dat。但只要我想用 for 循环读取时间周期,两个索引的值都为“timecyc9.dat”,即使 timecycles[0] 应该是“timecyc1.dat”,timecycles1 应该是“timecyc5.dat” .第二件事是,如何编写代码使 readTimecycles() 返回 char* timecycles,我可以在主函数中使用 char* timecycles[9] = readTimecycles() 或类似的东西对其进行初始化?
#include <iostream>
#include <cstdio>
char* timecycles[9];
void readTimecycles()
{
char buffer[256];
int numCycles = 0;
FILE* pFile = NULL;
for (int i = 1; i < 10; i++)
{
sprintf(buffer, "timecyc%d.dat", i);
pFile = fopen(buffer, "r");
if (pFile != NULL)
{
timecycles[numCycles] = buffer;
numCycles++;
std::cout << buffer << std::endl; //to see if the buffer is correct
}
}
for (int i = 0; i < numCycles; i++)
{
std::cout << timecycles[i] << std::endl; //here's the issue with timecyc9.dat
}
}
int main()
{
readTimecycles();
return 0;
}
【问题讨论】:
标签: c++