Essayer de minimiser nombre de lignes pour un tableau CICO chercher en stockant une struct contenant un tampon char dans un vecteur, le code ci-dessous:CICO - setDataBuffer + vecteur <struct>
struct Columns { char buffer[1000][300]; };
int i = 1;
Columns col;
ub4* ub = NULL;
results->setDataBuffer(i++, col.buffer, OCCI_SQLT_STR, sizeof(col.buffer[ 0 ]), ub);
vec.push_back(col);
cout << "Before, vec size: " << vec.size() << "\n"; // prints 1, as expected
while (results->next(1000)) {
for (size_t j = 0; j < results->getNumArrayRows(); ++j) {
cout << vec[ 0 ].buffer[ j ] << endl;
}
Maintenant, pour une raison quelconque, ce travail ne marche pas . Toutefois, si au lieu d'utiliser col.buffer, je crée un tampon de char [1000] [300] et jetez-le dans setDataBuffer puis dans la partie cout faire: cout < < tampon [j] < < endl;
qui fonctionne très bien. Donc, je ne suis pas vraiment sûr d'où je me fous?
le tampon de caractères est exactement la même chose que le fichier col.buffer, n'est-ce pas?
Je ne pense pas que cela soit important, mais struct Columns est défini dans le fichier d'en-tête.
Donc, push_back ne copie pas le contenu du tampon char? C'est confus, la documentation sur elle dit qu'il copie, pensé qu'il copierait tout. La solution emplace_back a cependant fonctionné, merci. – user1324674
Eh bien, il le copie, mais une fois qu'il est copié c'est un autre objet, seulement avec un contenu identique. Peut-être que vous avez l'habitude de dev dans un langage différent tel que C# de JS qui utilise l'objet comme référence par défaut. Cela signifie que si vous faites une copie d'un objet 'a' nommé' b' et modifiez 'b', le contenu de' a' est également modifié. Si vous voulez une copie réelle, vous devez le cloner. En C/C++ c'est différent, il utilise des valeurs par défaut. Cela signifie que si vous faites 'a = b',' a' est un clone de 'b', si vous modifiez l'un d'entre eux, l'autre n'est pas modifié (sauf si vous avez explicitement défini' a' comme référence, comme ' int &a = b; ') – Ludonope
Alors, que se passe-t-il exactement? L'original sort de la portée/remplacé puis pouf, les données sont parties? Cependant, utiliser un vecteur ne semble pas fonctionner avec la fonction setdatabuffer. Je ne comprends pas très bien pourquoi, le saurais-tu? Cela fonctionne avec 1 colonne, mais s'il y a plus de 1 colonnes, il se bloque. – user1324674