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);