Newsgroup: it.comp.lang.c++
Titolo: Conversione da int a *char

Perchè questo codice mi dà problemi? Il programma dice di aver
eseguito un'operazione non valida!
Eppure ho controllato su 
cplusplus.com
 la dichiarazione e l'esempio e
sembra che vada tutto bene:
         char *testo = "Mouse X: ";
         char * szMouseX = NULL;
         char * szMouseY = NULL;
         itoa(ptMouse.x, szMouseX, 10); //dà problemi
         itoa(ptMouse.y, szMouseY, 10); //dà problemi
         strcat(testo, szMouseX);
         strcat(testo, "  Y: ");
         strcat(testo, szMouseY);
E poi non c'è un metodo più semplice per concatenare stringhe e interi
come si fa agevolmente con tutti i linguaggi (Pascal, Java, ...)?
Ho provato anche
     char *testo = "Mouse X: ";
     sprintf(testo, "%7d   Y: %7d", ptMouse.x, ptMouse.y);
ma mi dà lo stesso problema  :(
-- 
_____________________
RedPelle
--==--==--==--==--==--==--
 
redp...@email.it
 
www.redpelle.cjb.net
--==--==--==--==--==--==--

 [cut]
Non ho letto il codice, ma pare che il problema stia nella lunghezza di
testo. Concatenando altre stringhe, 'sfondi' lo spazio riservato alla
variabile testo e scrivi chissà dove (sulle altre variabili) e hai un
comprtamento anomalo.
Qui siamo su icl.c++ e quindi ti darò il conisglio InTopic: abbandona
l'uso delle stringhe dichiarate come char * e usa la classe string!
Per concatenare delle stringhe potrai poi fare:
string testo;
testo = "X: " + x + " Y: " + y;
Ah, se proprio vuoi usare la strcat (e rimanere così al Ce non al C++),
usa almeno la strncat (nota la enne!): almeno non avrai problemi in
futuro!
Ciao,
itsme
-- 
amI

testo = "X: " + x + " Y: " + y;
Ok, perfetto, č quello che voglio  :)
Solo una cosa: č possibile poi usare un string come parametro per
quelle funzioni che richiedono un char * ?
P.S.: Ho risolto il problema dichiarando al posto del
char *s un char s[20], ma la soluzione che proponi č migliore se posso
convertire il valore in char *


 quelle funzioni che richiedono un char * ?
#include <string>
#include <iostream>
int main()
{
  std::string stringa;
  stringa = "The answer is: ";
  stringa += "42";
  const char * pchar = stringa.c_str();
  std::cout << pchar;
}
Attenzione che:
1- c_str() restituisce un "const char*" non un "char *"
2- il const char* restituito da c_str() č da considerarsi non piů valido
    dopo una qualsiasi operazione non const sulla std::string
    es:
    std::string stringa;
    stringa = "The answer is: 41";
    const char * pchar = stringa.c_str();
    stringa[16] = '2';
    char primo_c = pchar[0]; // non valida! accedo a pchar dopo
                  // operazione non const sulla std::string che l'ha
generato!
3- il problema al punto 2 non si verifica se uso c_str() per
    passare una stringa stile C a una funzione
4- posso comunque ovviare al problema al punto 2 creando una copia
    es (preso dallo Stroustrup) puoi farti una funzione tipo:
    char * c_string(const string& s)
    {
      char * p = new char[s.length()+1] // nota: +1
      s.copy(p,std::string::npos);
      p[s.length()] = 0;
      return p;
    }
5- attento che se la std::string contiene il carattere terminatore
    delle stringhe stile C, quando leggi quest'ultima generata da
    c_str() ti fermerai al carattere terminatore.
ciao
--
Gerolamo

[cut]
Grazie mille, e dire che avevo cercato in rete qualcosa, avevo trovato
la classe string, ma mi era sfuggito il metodo c_str()!
(mannaggia, devo cercare un help c++ standard da avere off-line, ho
solo quello per le API di windows...)
La prossima volta cercherň meglio, anche perchč non posso abusare
della vostra pazienza anche per queste cose  :)
