2015-04-26 2 views
-5

Я не могу напечатать значения символьного массива, даже когда я передать массив с адресом первого элемента:элементов массива указателей недостижимого при передаче функции

vbv_packet = Packet::create(&username[0], 
    &password[0], Packet::VBV, Packet::DATA, 
    bytea_from_memptr(& new_mr, car_multirecord::HEADER_SIZE + 
    (new_mr.get_count() * sizeof(car_compact_record)))); 

И в функции определения Я пытаюсь напечатать массив значений, как это:

static Packet::ptr create(const char* username, const char* password,RTCINET_COMMANDS cmd, RTCINET_COMMANDS subcmd, Packet::ptr_bytea ba) 
// TODO: unsigned short command_seq, data_seq, length 
{ 
    //Add user authentication fields, username n password here 

    std::cout << "********** CREATING PACKET"; 
    std::cout << "sizeof username: " << strlen(username); 
    std::cout << "sizeof password: " << strlen(password); 

    for(int i = 0; i < strlen(username); i++) 
    { 
     std::cout << *(username + sizeof(char) * i); 
    } 
    std::cout << "\n"; 
    for(int j = 0; j < strlen(password); j++) 
    { 
      std::cout << password[j]; 
    } 

Излишне говорить, что две строки определяются как:

const char username[] = "ARG-CO"; 
const char password[] = "xxxxx!"; 

где я делаю неправильно?

+0

Свод указателя принимает элементы, а не байты. – chris

+0

'& username [0]' почти такое же, как 'username' (в данном случае), по какой-либо причине не использовать' std :: string'? –

+0

Что ты имеешь в виду? – Saman

ответ

0
vbv_packet = Packet::create(username, 
    password, Packet::VBV, Packet::DATA, 
    bytea_from_memptr(& new_mr, car_multirecord::HEADER_SIZE + 
    (new_mr.get_count() * sizeof(car_compact_record)))); 

Должно быть правильно, что вы пытаетесь достичь здесь:

for(int i = 0; i < strlen(username); i++) 
    { 
     std::cout << *(username + sizeof(char) * i); 
    } 

Почему вы это делаете *(username + sizeof(char) * i), если вы хотите печатать каждый символ в этом массив символов использовать его как это: username[i]

Правильно ли он печатает пароль?

+0

сейчас, но ранее, когда я передавал указатель на функцию только с именем пользователя, это не было печать массива с использованием имени пользователя [i]. но он отлично работает! – Saman

+0

сейчас я не могу преобразовать массив в строку, используя: std :: string _usr (user); std :: string _pass (passwd); почему нет? – Saman

+0

Вам не нужно использовать std :: string, в основном потому, что он основан на char * – Frought

Смежные вопросы