@shodan, ne sai un bel po' direi! In pratica devo fare molta attenzione al fatto che, in C++, ogni volta che chiamo una funzione e le fornisco un certo input, la funzione agisce un realtà su una copia dell'argomento: di conseguenza, è molto comodo dichiarare una variabile dentro la stessa routine stampa_converti, dentro cui memorizzare la stringa convertita e stamparla. Ora volevo chiedere, come mai questo codice funziona:
codice:
#include <iostream>
#include <Windows.h>
void stampa_converti(char strano[]);
using namespace std;
int main() {
const char scritta[] = { "Saluda Andonio!" }; //creo il mio array inizzializzandolo con la tua frase
char strano[] = { "èéàòù perchééé" };
stampa_converti(strano);
system("pause");
}
void stampa_converti(char strano[]) {
char res1[4096] = { 0 }; // buffer di conversione grande 4096 byte
CharToOemBuffA(strano, res1, sizeof(res1)); //conversione totale dalla stringa a res1, con dimensioni di res1
cout << res1 << endl; //stampa correttamente con la codifica OEM
}
Mentre questo NON funziona:
codice:
#include <iostream>
#include <Windows.h>
void stampa_converti(char strano[]);
using namespace std;
int main() {
const char scritta[] = { "Saluda Andonio!" }; //creo il mio array inizzializzandolo con la tua frase
char strano[] = { "èéàòù perchééé" };
stampa_converti(strano);
system("pause");
}
void stampa_converti(char strano[]) {
char res1[4096] = { 0 }; // buffer di conversione grande 4096 byte
CharToOemBuffA(strano, strano, sizeof(strano)); //conversione totale dalla stringa da strano a strano, con dimensioni di strano
cout << strano << endl; //stampa errata
}
?
Inoltre, l'utilizzo delle parentesi graffe nella dichiarazione const char è obbligatorio?