символы полосы из массива char передаются как указатель в C ++ - PullRequest
0 голосов
/ 29 ноября 2011

любые предложения о том, как убрать символы из массива char, передаются как указатель в C ++. я должен использовать функцию memcpy для копирования.

void foo(char *test)
{
char a[1] = {0};
char b[1] = {0};
char c[1]= {0};

memcpy(&a,&test[0],1);
memcpy(&b,&test[1],1);
memcpy(&c,&test[2],1);

cout << a <<endl;
cout << b <<endl;
cout << c <<endl;
}

int main()
{
char uibuffer[4] = "ABC";
foo(uibuffer);
return 0;
}

токовый выход:

ABC��
BC��
C��

желаемый результат:

A
B
C

Ответы [ 4 ]

3 голосов
/ 29 ноября 2011
void foo(char *test)
{
/* Please note, you need to add one extra byte here for a terminator */
char a[2] = {0};
char b[2] = {0};
char c[2]= {0};

memcpy(&a,&test[0],1);
memcpy(&b,&test[1],1);
memcpy(&c,&test[2],1);

cout << a <<endl;
cout << b <<endl;
cout << c <<endl;
}

int main()
{
char uibuffer[4] = "ABC";
foo(uibuffer);
return 0;
}

OR

Подумайте об улучшении своего кода, избавившись от массивов и копирования памяти. Простой char a = buffer[x] сделает свое дело.

2 голосов
/ 29 ноября 2011

Не делайте a, b и c массивом.Вероятно, не будет компилироваться, но для иллюстрации.

void foo(char *test)
{
char a = 0;
char b = 0;
char c = 0;

memcpy(&a,&test[0],1);
memcpy(&b,&test[1],1);
memcpy(&c,&test[2],1);

cout << a <<endl;
cout << b <<endl;
cout << c <<endl;
}

int main()
{
char uibuffer[4] = "ABC";
foo(uibuffer);
return 0;
}
2 голосов
/ 29 ноября 2011

, поскольку вы не создали \ 0 завершенных строк, выполните:

cout << a[0] <<endl;
cout << b[0] <<endl;
cout << c[0] <<endl;
1 голос
/ 29 ноября 2011

Не делайте их массивами:

char a = test[0];
char b = test[1];
char c = test[2];

Вы все еще можете использовать memcpy, если нужно, так же, как и сейчас.

...