Salve a tutti, mi sono accorto di questo problema da poco e non ho ben capito se è un bug o una mia incompresione delle stringhe, ho scritto questo piccolo sketch di codice che lo mostra:
Quello che dovrebbe fare è: ricevendo una stringa in input manda come output la stessa stringa però con tutti i caratteri spazio rimossi.
Quindi mandando come input la stringa "a b c" dovrebbe mandare in output la stringa "abc" ma non è così, quello che ricevo è "abc c" eppure esaminando la regione di memoria su cui è allocata la stringa (Dopo essere uscito dal ciclo for) è
C++:
#include <iostream>
#include <string>
int main()
{
std::string a;
std::cout << "Cin String: ";
getline(std::cin, a);
for (int i = 0, ii = 0; i <= a.length(); i++)
{
if (a[i] != ' ')
{
a[ii] = a[i];
ii++;
}
}
std::cout << "Output: " << a;
std::cout << "\nString length: " << a.length();
getchar();
}
Quindi mandando come input la stringa "a b c" dovrebbe mandare in output la stringa "abc" ma non è così, quello che ricevo è "abc c" eppure esaminando la regione di memoria su cui è allocata la stringa (Dopo essere uscito dal ciclo for) è
61 62 63 00 63
- 'a' 'b' 'c' '\0' 'c'
(di consequenza l`operatore cout dovrebbe fermarsi al quarto carattere '\0') e non capisco il motivo per cui la funzione length()
dia come risultato 5 non ostante il carattere '\0' si trovi dopo 3 caratteri