Saya ingin membangun serangkaian jalur dengan nomor seri melalui loop for, jadi saya menggunakan serangkaian strcpy dan strcat (Saya tahu ada metode string, tapi tolong maafkan saya, teknik saya sangat buruk). Tapi setelah loop, saya mendapatkan serangkaian hasil yang sama.

Ini kode saya:

#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:\\", ukuran filevector adalah 2. Tidak diragukan lagi, saya ingin mendapatkan hasil mengalir:

TempFilePath[0]="E:\\Temp\\tempData1.tif"
TempFilePath[1]="E:\\Temp\\tempData2.tif"

Tapi setelah dijalankan, hasilnya seperti berikut:

 TempFilePath[0]="E:\\Temp\\tempData2.tif"
 TempFilePath[1]="E:\\Temp\\tempData2.tif"

Dapatkah seseorang memberi tahu saya mengapa dan bagaimana mengubahnya?

Catatan: Saya masih ingin menggunakan vector < char * > daripada vector < string >, karena saya menggunakan banyak fungsi di jaringan, dan nilai balik serta nilai inputnya bertipe char *. Tentu saja, jika ada metode, tetap bisa mencapai tujuan di atas. Terima kasih lagi

0
Ahri 13 Mei 2021, 07:52

1 menjawab

Jawaban Terbaik

Semua elemen vektor Anda memiliki nilai pointer yang sama, alamat dari array TempFilePathChar. Di loop Anda, Anda menimpa konten array itu sehingga Anda selalu mendapatkan konten yang dihasilkan oleh iterasi terakhir dari loop.

3
jkb 13 Mei 2021, 05:05