PDA

Visualizza la versione completa : [C++] copiare array di chars in un vector<char>


gianvituzzi
25-01-2010, 18:32
Salve,

ho il seguente problema, una funzione mi ritorna:



// Get time
char szTime[30]; getDateTime(szTime);

void getDateTime(char * szTime)
{
time_t rawtime = time(NULL);
struct tm timeinfo;
gmtime_s(&timeinfo, &rawtime);
strftime(szTime, 30, "%a, %d %b %Y %X GMT", &timeinfo);
}


ed ho un vettore di caratteri:



std::vector<char> vChar;
vChar.resize(30);


vorrei copiare da szTime a vChar con l'operatore di assegnazione = ma mi da errore...come posso risolvere il problema?

grazie!

shodan
25-01-2010, 18:49
Puoi fare direttamente così:


std::vector<char> vChar(&szTime[0],&szTime[30]);


oppure se è già dichiarato:


std::vector<char> vChar;
std::copy(&szTime[0],&szTime[30],std::back_inserter(vChar));


Anche se più elegante potrebbe essere:


void getDateTime(std::vector<char>& szTime)
{
time_t rawtime = time(NULL);
struct tm timeinfo;
gmtime_s(&timeinfo, &rawtime);
strftime(&szTime[0], szTime.size(), "%a, %d %b %Y %X GMT", &timeinfo);
}

std::vector<char> vChar(30);
getDateTime(vChar);



o in alternativa:



std::string getDateTime()
{
time_t rawtime = time(NULL);
struct tm timeinfo;
gmtime_s(&timeinfo, &rawtime);
std::string szTime(30,'');
strftime(&szTime[0], szTime.size(), "%a, %d %b %Y %X GMT", &timeinfo);
return szTime;
}

std::string vChar = getDateTime();

antotan
25-01-2010, 18:50
#include <vector>
#include <iostream>

using namespace std;

void print(vector<char> vc)
{
for(vector<char>::iterator i = vc.begin(); i < vc.end(); i++)
cout << *i << "|";
cout << endl;
}

int main()
{
char c[] = {'a', 'b', 'c'};
int size = sizeof(c)/sizeof(c[0]);

// mediante costruttore
vector<char> vc(c, c+size);
print(vc);

vector<char> vc2;
//mediante copy e back_inserter
copy(c, c+size, back_inserter(vc2));
print(vc2);
}



edit: anticipato...

gianvituzzi
25-01-2010, 19:39
ho provato il codice inserito in questo programma ma non funziona:



#include <windows.h>
#include <vector>
#include <cstdlib>
#include <ctime>
#include <cstdio>
#include <boost/circular_buffer.hpp>
using namespace std;
using namespace boost;

void getDateTime(char * szTime);
const int numbuff = 5;
const int buflen = 30;

struct Buffer
{
public:
vector<char> vChar;
int bufferLength;
int bytesRecorded;
int user;
Buffer() : bytesRecorded(0), bufferLength(0), user(0) { };
};

int main()
{
circular_buffer<Buffer> cb(numbuff);
circular_buffer<Buffer>::const_iterator it;

// Insert elements
for(int i = 0; i<10; i++)
{
// Get time
char szTime[30]; getDateTime(szTime);

// Init Buff
Buffer buff;
copy(&szTime[0],&szTime[30],std::back_inserter(buff.vChar));

//buff.vChar.assign(szTime, szTime+strlen(szTime));
buff.bufferLength = buflen;
buff.bytesRecorded = buflen;
buff.user = i;

printf("%d, %d, %s\n", buff.user, buff.bufferLength, szTime);

cb.push_back(buff);
}

// Show elements:
for(int i = 0; i<(int)cb.size(); i++)
{
printf("%d, %d, %s\n", cb[i].user, cb[i].bufferLength, cb[i].vChar);
}

system("pause");
return EXIT_SUCCESS;
}

// getDateTime (Fri, 10 Oct 2008 14:41:59 GMT)
void getDateTime(char * szTime)
{
time_t rawtime = time(NULL);
struct tm timeinfo;
gmtime_s(&timeinfo, &rawtime);
strftime(szTime, 30, "%a, %d %b %Y %X GMT", &timeinfo);
}


nel secondo loop for, mi ritorna <null>

Loading