Newsgroup: it.comp.lang.c
Titolo: Problemino con stringhe

Da poco ho iniziato a programmare in C, quindi il mio problema potrebbe
essere anche banale.
Devo concatenare un carattere definito < int carattere1; > con una stringa <
char stringa1[] >, ma non ci riesco.
Ho provato la funzione strcat, ma funziona solo su due stringhe, non su una
stringa ed un intero.
Come posso fare?

 wrote in message
95c7uf$l5h$1...@serv1.iunet.it...

Prova a convertire il carattere1 in stringa. A questo scopo puoi usare la
funzione:
char *_itoa( int value, char *string, int radix );
dove value è il numero da convertire, *string è un puntatore alla stringa
che dovrà contenere il valore convertito, e radix è la base di value, cioè
se decimale, binario, ecc... (almeno penso, su quest'ultimo punto ho qualche
dubbio). Usala così:
itoa(carattere1, &stringa1[n],10);
per utilizzarle devi inserire il file d'intestazione:
#include <stdlib.h>
Spero di averti dato una risposta esauriente e, più che altro, corretta :-)
estr...@libero.it
estr...@tiscalinet.it
http://web.tiscalinet.it/tempo_libero/index.html
Qui trovi la traduzione di tutte le funzioni per la gestione di stream di
input-output. Se ti interessa vai alla sezione programmazione. L'ho tradotto
io, quindi occhio agli errori :-)

Come posso fare?
sprintf( stringa_destinazione, "%s%c", stringa, intero ) ;
--
Andrea Laforgia (ICQ 87230455)
http://www.geocities.com/AndreaLaforgia
"ci sono tre tipi di persone nel mondo : quelli che
 sono bravi in matematica e quelli che non lo sono."

Spero di averti dato una risposta esauriente e, pių che altro, corretta :-)
Non corretta.
itoa non e' standard.


 sprintf( stringa_destinazione, "%s%c", stringa, intero ) ;
che pero' e' deprecata. snprintf(), o una implementazione personale 
(vedi freebsd)
-- 
cd /pub
more beer
BW2K+1

(vedi freebsd)
"deprecata" da parte di chi ???


 "deprecata" da parte di chi ???
da chiunque stia attento alla sicurezza dei sistemi, e' una delle fonti 
+ numerose di BOF exploit, assieme a strcpy (da sostituire con strncpy).
Le versioni di freebsd ve le consiglio caldamente

 (vedi freebsd)
snprintf e' stata definita da ISO/IEC 9899:1999 (C99 o C9X); pero' in
un modo non compatibile con le precedenti implementazioni FreeBSD (a
riguardo della chiamata con size=0 e str=NULL).  Non conosco alcun
compilatore che in questo momento implementi C99, e percio' suggerisco
di aspettare ad usare snprintf...
-- 
Maurizio Loreti                         
http://www.pd.infn.it/~loreti/mlo.html
Univ. of Padova, Dept. of Physics - Padova, Italy            
lor...@pd.infn.it
The instructions said to use Windows 98 or better - so I installed FreeBSD.

+ numerose di BOF exploit, assieme a strcpy (da sostituire con strncpy).
Evidentemente l'articolo di Linux & C. di questo mese sui buffer
overflow ti ha lasciato piuttosto impressionato.
I controlli sulla lunghezza della stringa si possono fare a monte,
rispetto all'uso della sprintf().


 di aspettare ad usare snprintf...
la cosa mi sembra facilmente superabile...
#ifdef  __MSVC__ /* o altro compilatore senza snprintf */
#define USE_MY_STRING
#endif
#ifdef USE_MY_STRING
  #include <my_string.h>
  /* al cui interno c'e' il codice di openbsd, 
     perche' riscrivere?-)
  */
#else
  #include <string.h>
#endif

 rispetto all'uso della sprintf().
si, ma li devi scrivere tu ogni volta. Cosi' li si scrive una volta 
sola e non ci si pensa piu'.
Se poi, per riuso del codice, s'intende copia e incolla, allora ...
:)

:)
Che c'entra il riuso del codice ?


   */
Perche' il codice openbsd non segue lo standard C99 (come ho detto e
tu non hai letto/capito)


 Che c'entra il riuso del codice ?
i controlli, li metti nella snprintf, e ti regoli di conseguenza, il 
riuso c'entra perche' riusi una funzione che integra i controlli, e non 
li devi fare tu.
forse stiamo parlando di cose diverse?-)

 tu non hai letto/capito)
ops, sapevo di aver dimenticato qualcosa...
va be' si puo' sempre renderlo compliant, non mi sembra siano molte le 
modifiche da fare, se la sola differrenza sia ha con size = 0 e str = 
NULL, va modificato un solo if

forse stiamo parlando di cose diverse?-)
Ok, siamo d'accordo. Il controllo sulla lunghezza e' utile perche'
fatto in automatico, ma in generale i controlli da compiersi sono
anche altri e secondo me e' sempre bene esplicitarli (anche per
leggibilita' del codice).
Ma poi, a livello pratico, questa funzione e' implementata da qualche
compilatore ?


 compilatore ?
il gcc di serie su openBSD :)

 il gcc di serie su openBSD :)
e anche il gcc version 2.95.3 19991030 per linux
mi sembra anche mingw e cygwin, nelle ultime versioni