无符号字符上的键盘输入

Keyboard input on unsigned char?

本文关键字:键盘 输入 字符 无符号      更新时间:2023-10-16
uchar szPlaintext[128];                        //dato da criptare 
cout << "nInserisci testo : ";
getline(cin, szPlaintext);

我用getline(cin,szPlaintext(尝试过;但我有很多错误。我使用 VS2015 编译。前提是我正在尝试在我的程序中实现 AES(不是我的(;乌查尔宣言就是这样。

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

错误是:

1>d:downloadscuolac++virtualaesvirtualaesencrypt.cpp(32): error C2672: 'getline': no matching overloaded function found
1>d:downloadscuolac++virtualaesvirtualaesencrypt.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.0vcincludestring(157): note: see declaration of 'std::getline'
1>d:downloadscuolac++virtualaesvirtualaesencrypt.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.0vcincludestring(146): note: see declaration of 'std::getline'
1>d:downloadscuolac++virtualaesvirtualaesencrypt.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.0vcincludestring(126): note: see declaration of 'std::getline'
1>d:downloadscuolac++virtualaesvirtualaesencrypt.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.0vcincludestring(73): note: see declaration of 'std::getline'
Pietrob0b
Utente Junior
Messaggi: 36
Iscritto il: 10 dic 2015, 20:44

std::getline采用std::string引用,而不是原始指针。

string sPlaintext;
cout << "nInserisci testo : ";
getline(cin, sPlaintext);
uchar* szPlaintext = (uchar*) sPlaintext.c_str();  //dato da criptare 

正如其他人已经指出的那样,std::getline 引用了 std::string 而不是 "char *",所以你的程序编译失败了。下面是两个版本的 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;
}