【发布时间】:2021-05-13 04:52:26
【问题描述】:
我想通过一个for循环构建一系列带有序列号的路径,所以我使用了一系列strcpy和strcat(我知道有一个string的方法,但请见谅,我的技术真的很差)。但是在循环之后,我得到了一系列相同的结果。
这是我的代码:
#include <iostream>
#include <io.h>
#include <vector>
vector<char*> TempFilePath;
char temp[300];
strcpy(temp, EndFilepath);
strcat(temp, "\\Temp");
createDirectory(temp);
char TempFilePathChar[300];
for (int j = 0; j < filevector.size(); j++)
{
int number = j + 1;
char TEMPNum[1];
itoa(number, TEMPNum, 10);
strcpy(TempFilePathChar, temp);
strcat(TempFilePathChar, "\\tempData");
strcat(TempFilePathChar, TEMPNum);
strcat(TempFilePathChar, ".tif");
strcpy(TempFilePathChar, TempFilePathChar);
TempFilePath.push_back(TempFilePathChar);
}
EndFilepath="E:\\",filevector 的大小是 2。毫无疑问,我想得到流动的结果:
TempFilePath[0]="E:\\Temp\\tempData1.tif"
TempFilePath[1]="E:\\Temp\\tempData2.tif"
但运行后,结果如下:
TempFilePath[0]="E:\\Temp\\tempData2.tif"
TempFilePath[1]="E:\\Temp\\tempData2.tif"
谁能告诉我为什么以及如何改变它?
注意:我还是想用vector
【问题讨论】:
-
你没有显示
TempFilePath的声明,这对解决你的问题至关重要。我猜应该是vector<char*>,而应该是vector<string>。 -
@MarkRansom 对不起,这是我的疏忽。他确实是一个向量。我已经修改了查询。你能告诉我问题是什么
-
我建议你使用
std::vector<std::string>而不是std::vector<char*>。 -
您只有一个
char temp[300];缓冲区,向量中存储了多个指针,它们都指向它。所以很自然,向量中的所有指针都指向相同的数据(无论当前在temp中的什么) -
另外你的
char TEMPNum[1]太短了;如果您希望它足够大以存储一个 ASCII 字符,则它至少需要为char TEMPNum[2],这样您就有一个字符用于数字,另一个字符用于保存 NUL 终止符字节。 (如果你想让它存储多于一位的数字,它需要比那个更大)