为什么 push_back() 会改变之前的值?
Why push_back() will change the previous value?
我想通过一个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而不是vector,因为我用了很多网络上的函数,它们的return值和输入值都是char *类型.当然,如果有方法的话,还是可以达到上述目的的。再次感谢
你的vector的元素都是相同的指针值,数组的地址TempFilePathChar
。在您的循环中,您将覆盖该数组的内容,因此您始终获得循环最后一次迭代产生的内容。
我想通过一个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
你的vector的元素都是相同的指针值,数组的地址TempFilePathChar
。在您的循环中,您将覆盖该数组的内容,因此您始终获得循环最后一次迭代产生的内容。