Newsgroup: it.comp.lang.c
Titolo: soliti puntatori e stringhe

devo solamente cambiare il primo carattere di una stringa da minuscolo in maiuscolo
questo è il codice che ho fatto
void main(int argc, char* argv[])
{  
   char * parola;
   parola="maiuscola";
   char * pc=parola;
   if(islower(*pc)) 
	    *pc = toupper(*pc);
   printf("%s\n",parola);
 
   return;
};
ERRORE Non capisco dove sbaglio
Grazie in anticipo a tutti
       Pau

    return;
parola punta ad una stringa costante e, di conseguenza, pc. Dopodichè 
tenti di modificare la stringa costante e questo è un errore.
Copiati la stringa da modificare in un buffer modificabile, i.e. 
allocato dinamicamente.

 	    *pc = toupper(*pc);
L'if è inutile: se il carattere non è una lettera minuscola, la toupper lo
lascia invariato.
--
Cingar
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 void main(int argc, char* argv[])
<...>
int main()
Il (non)tipo void, a rigor di standard, non è consentito.


Ieri sera non avendo ancora guardato il newsgroup  risolsi
(apparentemente )
il problema cosě:
char pc[20];
char * mini(char * par);
void main(int argc, char* argv[])
{  
   char * parola= "memoria";
   printf("%s\n",mini(parola));
   return;
}
char * mini(char * par)
{  
   int i=1;
   pc[0]=par[0];
   pc[0] = toupper(pc[0]);
   while (par[i]!='\0') 
   {
	 pc[i]=par[i];
	 i++;
    };	 
   pc[i]=par[i];
   return (char *)pc; 
};
Dico apparentemente perche come funzione Funziona ma ho un enorme
spreco di memoria! dovuto al char pc[20]; (variabile globale)
L'idea di utilizzare la def char parola[]="memoria"; OK ma io ho
questa funzione min a cui devo  passare come parametro un char *;
Con questa funzione devo cercare delle parole (parola) all'interno di
stringhe (molte stringhe) e la devo utilizzare parecchie volte.Dovrei
riuscire a sprecare meno memoria possibile
 ciao a tutti Pau

 questa funzione min a cui devo  passare come parametro un char *;
Nel passaggio a funzione l'array decade a puntatore al primo elemento,
quindi non c'e` nessun problema:
char *mini(char *);
int main(void) {
        char[] parola = "parola";
        printf("%s\n", mini(parola));
        return 0;
}
char *mini(char *p) {
        toupper(p[0]);
        return p;
}
Luca
-- 
Home: 
http://kronoz.cjb.net
Una donna sposa un uomo sperando che cambi, e lui non cambiera`. Un
uomo sposa una donna sperando che non cambi, e lei cambiera`.

 void main(int argc, char* argv[])
<...>
Aridalle:
int main()


Grazie per i vostri consigli ne ho fatto buon uso :)
ma purtroppo il problema rimane  out of memory 
e non riesco a capire come fare 
Devo fare un porting tra un DB Lotus e Uno Mysql
apro le due connessioni ai 2 DB e fin qui 
Nel primo DB ho una lista di documenti ordinati per Titolo ,per ogni
doc prendo il Titolo alcune info e cerco se nel titolo c'è un parola
(che ho preso da un tabella mysql di 200 parole p.s le devo
controllare tutte per ogni titolo) e cosi via se trovo la parola
all'interno del titolo  ok inserisco il titolo nel nuovo DB. Dopo ogni
query  libero la mem con free_result_set etc etc
ciao Pau

 Devo fare un porting tra un DB Lotus e Uno Mysql
Non vedo cosa c'entri con quello che hai scritto fino ad adesso.
Il problema non "rimane", è uno nuovo.
Anzi, mi sembra molto più radicale, difficilmente risolvibile con delle 
nozioni raccolte a spot sui newsgroup.

 Devo fare un porting tra un DB Lotus e Uno Mysql
<...>
Non ti sembra di esagerare ?
Questo gruppo non parla nč di Lotus, nč di Mysql.
Per cortesia, attieniti al topic.


il fatto è che io credevo che il mio out of memory fosse dovuto alla
funzione  di ricerca stringhe che avevo implementato ma dato che il
prblema rimane evidentemente non è quello.
Non mi sembra di aver esagerato .Il topic non sarà quello giusto ma
visto che le connessioni ai due db le sto facendo all'interno di un
programma in c pensavo che qualcuno di voi avesse gia avuto a che fare
con questi problemi e mi potesse aiutare.