C++,我使用 Vector 中的函数 at(),但我有问题
C++, i use the function at() from Vector, but i have problem
cannot convert '__gnu_cxx::__alloc_traits<std::allocator<std::__cxx11::basic_string<char> >, std::__cxx11::basic_string<char> >::value_type' {aka 'std::__cxx11::basic_string<char>'} to 'const char*'gcc
真诚地,我不知道为什么以及如何纠正这个问题。
#include <stdio.h>
#include <conio.h>
#include <string>
#include <vector>
namespace anas
{
void passwordGenerator()
{
std::vector<std::string> PasswordString;
std::string ElencoAlfabeto("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789");
char CharAlfabeto[ElencoAlfabeto.length()];
for (int Lettere_Create = 0; Lettere_Create < 8; Lettere_Create++)
{
int NumeroCarattere = rand() % sizeof(CharAlfabeto);
CharAlfabeto [NumeroCarattere] = ElencoAlfabeto[NumeroCarattere];
PasswordString.push_back(CharAlfabeto[NumeroCarattere]);
}
for (int Lettere_Scritte = 0; Lettere_Scritte < 8; Lettere_Scritte++)
{
printf ( PasswordString.at(Lettere_Scritte) );
}
}
}
int main()
{
system("cls");
std ::printf("the program is started... \n \n");
anas::passwordGenerator();
}
输出应该是一个随机的 8 字母生成器。
是的,这是我第一次使用 vector
...这里是我使用的文章:
当我将鼠标光标放在 at
上时,我看到 1 个过载,什么是过载?
在这一行
printf ( PasswordString.at(Lettere_Scritte) );
函数 printf
需要一个 const char*
但你给它一个 std::string
.
除了类型不匹配之外,永远不要将任意数据作为 printf
的第一个参数传递,因为它会尝试解释格式代码。
如果你真的想使用 printf
,这会起作用:
printf( "%s", PasswordString.at(Lettere_Scritte).c_str() );
您可以使用 puts
:
完全跳过格式代码解码
puts( PasswordString.at(Lettere_Scritte).c_str() );
或者您可以使用 C++ iostreams,它知道 std::string
并且根本不需要 c_str()
调用:
std::cout << PasswordString.at(Lettere_Scritte);
cannot convert '__gnu_cxx::__alloc_traits<std::allocator<std::__cxx11::basic_string<char> >, std::__cxx11::basic_string<char> >::value_type' {aka 'std::__cxx11::basic_string<char>'} to 'const char*'gcc
真诚地,我不知道为什么以及如何纠正这个问题。
#include <stdio.h>
#include <conio.h>
#include <string>
#include <vector>
namespace anas
{
void passwordGenerator()
{
std::vector<std::string> PasswordString;
std::string ElencoAlfabeto("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789");
char CharAlfabeto[ElencoAlfabeto.length()];
for (int Lettere_Create = 0; Lettere_Create < 8; Lettere_Create++)
{
int NumeroCarattere = rand() % sizeof(CharAlfabeto);
CharAlfabeto [NumeroCarattere] = ElencoAlfabeto[NumeroCarattere];
PasswordString.push_back(CharAlfabeto[NumeroCarattere]);
}
for (int Lettere_Scritte = 0; Lettere_Scritte < 8; Lettere_Scritte++)
{
printf ( PasswordString.at(Lettere_Scritte) );
}
}
}
int main()
{
system("cls");
std ::printf("the program is started... \n \n");
anas::passwordGenerator();
}
输出应该是一个随机的 8 字母生成器。
是的,这是我第一次使用 vector
...这里是我使用的文章:
当我将鼠标光标放在 at
上时,我看到 1 个过载,什么是过载?
在这一行
printf ( PasswordString.at(Lettere_Scritte) );
函数 printf
需要一个 const char*
但你给它一个 std::string
.
除了类型不匹配之外,永远不要将任意数据作为 printf
的第一个参数传递,因为它会尝试解释格式代码。
如果你真的想使用 printf
,这会起作用:
printf( "%s", PasswordString.at(Lettere_Scritte).c_str() );
您可以使用 puts
:
puts( PasswordString.at(Lettere_Scritte).c_str() );
或者您可以使用 C++ iostreams,它知道 std::string
并且根本不需要 c_str()
调用:
std::cout << PasswordString.at(Lettere_Scritte);