2015-12-22 2 views
-2
uchar szPlaintext[128];      //dato da criptare 
cout << "\nInserisci testo : "; 
getline(cin, szPlaintext); 

Я попробовал его с getline (cin, szPlaintext); но у меня много ошибок. Я компилирую VS2015. Предположим, что я пытаюсь внедрить AES (не мою), в свою программу; Таким образом, декларация об учене.Ввод клавиатуры на unsigned char?

uchar szPlaintext [128] = "text that I want to insert"; 

Ошибки:

1>d:\download\scuola\c++\virtualaes\virtualaes\encrypt.cpp(32): error C2672: 'getline': no matching overloaded function found 
1>d:\download\scuola\c++\virtualaes\virtualaes\encrypt.cpp(32): error C2784: 'std::basic_istream<_Elem,_Traits> &std::getline(std::basic_istream<_Elem,_Traits> &,std::basic_string<_Elem,_Traits,_Alloc> &)': could not deduce template argument for 'std::basic_string<_Elem,_Traits,_Alloc> &' from 'uchar [128]' 
1> c:\program files (x86)\microsoft visual studio 14.0\vc\include\string(157): note: see declaration of 'std::getline' 
1>d:\download\scuola\c++\virtualaes\virtualaes\encrypt.cpp(32): error C2780: 'std::basic_istream<_Elem,_Traits> &std::getline(std::basic_istream<_Elem,_Traits> &,std::basic_string<_Elem,_Traits,_Alloc> &,const _Elem)': expects 3 arguments - 2 provided 
1> c:\program files (x86)\microsoft visual studio 14.0\vc\include\string(146): note: see declaration of 'std::getline' 
1>d:\download\scuola\c++\virtualaes\virtualaes\encrypt.cpp(32): error C2784: 'std::basic_istream<_Elem,_Traits> &std::getline(std::basic_istream<_Elem,_Traits> &&,std::basic_string<_Elem,_Traits,_Alloc> &)': could not deduce template argument for 'std::basic_string<_Elem,_Traits,_Alloc> &' from 'uchar [128]' 
1> c:\program files (x86)\microsoft visual studio 14.0\vc\include\string(126): note: see declaration of 'std::getline' 
1>d:\download\scuola\c++\virtualaes\virtualaes\encrypt.cpp(32): error C2780: 'std::basic_istream<_Elem,_Traits> &std::getline(std::basic_istream<_Elem,_Traits> &&,std::basic_string<_Elem,_Traits,_Alloc> &,const _Elem)': expects 3 arguments - 2 provided 
1> c:\program files (x86)\microsoft visual studio 14.0\vc\include\string(73): note: see declaration of 'std::getline' 
Pietrob0b 
Utente Junior 

Messaggi: 36 
Iscritto il: 10 dic 2015, 20:44 
+0

Я рекомендую вам прочитать [это 'станд :: getline' ссылки] (http://en.cppreference.com/w/cpp/string/basic_string/getline). Если вы это сделаете, вы увидите, что нет перегрузки, которая принимает массив символов (подписанный или нет). –

+0

Что такое 'uchar'' typedef'ed? – Downvoter

ответ

0

std::getline принимает std::string ссылку, а не сырой указатель.

string sPlaintext; 
cout << "\nInserisci testo : "; 
getline(cin, sPlaintext); 

uchar* szPlaintext = (uchar*) sPlaintext.c_str(); //dato da criptare 
+0

, если я пытаюсь объявить строку или символ, он конфликтует с другими функциями, оригинальная программа предназначена для работы только с uchar. Для этого я спросил. Я пытаюсь внедрить AES (не мою), в свою программу. –

+0

, тогда вы должны получить строку и разделить ее на массив uchar. – ForeverStudent

+0

@jpo: Отрицательный для этой строки "uchar * szPlaintext = (uchar *) sPlaintext.c_str();" Вы думаете, что это по какой-то причине сработает? –

-1

Как и другие уже указывали зЬй :: GetLine принимает ссылку на станд :: строка не «символ *», так что ваша программа не смогла собрать. Ниже приведены две версии std :: getline.

istream& getline (istream& is, string& str, char delim); 

istream& getline (istream& is, string& str); 

Теперь, как заставить его работать, предполагая, что вы хотите вводить строку в char *. Следуйте приведенной ниже программе.

// Example program 
#include <iostream> 
#include <string> 
#include<cstring> 

int main() 
{ 
    char szPlaintext[128];      //dato da criptare 
    std::cout << "\nInserisci testo : "; 
    std::string str ; 
    getline(std::cin, str); 
    strcpy(szPlaintext,str.c_str()); 

    std::cout << szPlaintext; 
} 
+0

Ваш код небезопасен и будет seg fault, если строка ввода пользователя больше 128. – jpo38

+0

См. Вопрос OP. Он сам взял строку размером 128. Единственная проблема, с которой он столкнулся, заключалась в том, чтобы вставить ввод в эту строку. Поэтому я предполагаю, что он предположил, что вход не будет больше 128. Как правило, идея программы должна отображаться, как это делается .if OP требует изменений в строке он может легко это сделать. –

+0

Размер должен быть проверен перед выполнением strcpy. – jpo38

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