Mentre mettendo insieme una funzione a-maiuscolo in C++ ho notato che non ho ricevuto i risultati attesi in C.stringa C maiuscolo in C e C++
funzioneC++
#include <iostream>
#include <cctype>
#include <cstdio>
void strupp(char* beg)
{
while (*beg++ = std::toupper(*beg));
}
int main(int charc, char* argv[])
{
char a[] = "foobar";
strupp(a);
printf("%s\n", a);
return 0;
}
uscita come previsto:
FOOBAR
funzione C
#include <ctype.h>
#include <stdio.h>
#include <string.h>
void strupp(char* beg)
{
while (*beg++ = toupper(*beg));
}
int main(int charc, char* argv[])
{
char a[] = "foobar";
strupp(a);
printf("%s\n", a);
return 0;
}
L'uscita è il risultato previsto con il primo carattere mancante
OOBAR
Qualcuno sa il motivo per cui il risultato viene troncato durante la compilazione in C?
E se davvero volevi farlo in 'C++': 'std :: transform (a, a + strlen (a), a, std :: toupper); ' – PaulMcKenzie
Puoi spiegare perché ti aspettavi che questo convertisse una stringa in maiuscolo? Nello specifico, perché ti aspettavi che il lato destro di '=' fosse valutato prima della sinistra? –
Sono grato a tutte le persone che hanno fornito feedback e per le preziose informazioni fornite –