[C] string lowercase

Linguaggi di programmazione: php, perl, python, C, bash e tutti gli altri.
joker982
Prode Principiante
Messaggi: 23
Iscrizione: giovedì 13 ottobre 2005, 3:16

[C] string lowercase

Messaggio da joker982 »

ciao a tutti
ho bisogno di convertire i caratteri maiuscoli di una strina, in caratteri minuscoli

navigando qua e la mi sono accorto dell'esistenza della funzione "strlwr", ma da quello che ho capito non è nello standard c, infatti , se usata, mi dava errore (il compilare norn riusciva a trovarla)

per cui ho deciso di costruine una io (se c'è un metodo per usare quella predefinita fatemelo sapere), consultando pagine web che, praticamente, la riportavano già fatta

Codice: Seleziona tutto

#include <stdio.h>
#include <string.h>
#include <ctype.h>
char * strlwr2 (char *a)
{
  char *ret = a;

  while (*a != '\0'){
	if (isupper (*a)){
		printf("lettera da convertire %c\n", *a);         //stampa esattamente la lettera che voglio
		*a = tolower ((unsigned char)*a);                  //qui la segmentation fault
	}
	++a;
    }

  return ret;
}


int main()
{
char * pippo;
pippo ="cIaO";
printf("stringa %s\n", pippo);
pippo=strlwr2(pippo);
printf("stringa %s\n", pippo);
}
ma al momento dell'esecuzione salta fuori una segmentation fault, precisamente
Segmentation fault (core dumped)
nella riga commentata sopra....



come posso risolvere il mio problema?? grazie
Avatar utente
paper0k
Rampante Reduce
Rampante Reduce
Messaggi: 7220
Iscrizione: lunedì 2 ottobre 2006, 13:39
Contatti:

Re: [C] string lowercase

Messaggio da paper0k »

MMM.... veramente a me funziona....
Ma non è che gli passi un array di caratteri costanti? Cioè è l'unico caso che ho trovato che ha generato un core... tipo così:

Codice: Seleziona tutto

char *stringa="Pippo pluto E paperino";
in questo caso (non mi vorrei sbagliare) la stringa non può essere modificata è come se fosse una costante... ;)
Ultima modifica di paper0k il giovedì 11 ottobre 2007, 8:45, modificato 1 volta in totale.
Chiunque può essere ragionevole, ma esser sani di mente è raro (Oscar Wilde)
Wiki|Blog|Twitter|Identi.ca|last.fm
Avatar utente
thelo
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 269
Iscrizione: lunedì 8 gennaio 2007, 17:16

Re: [C] string lowercase

Messaggio da thelo »

joker982 ha scritto: ciao a tutti
ho bisogno di convertire i caratteri maiuscoli di una strina, in caratteri minuscoli

navigando qua e la mi sono accorto dell'esistenza della funzione "strlwr", ma da quello che ho capito non è nello standard c, infatti , se usata, mi dava errore (il compilare norn riusciva a trovarla)

per cui ho deciso di costruine una io (se c'è un metodo per usare quella predefinita fatemelo sapere), consultando pagine web che, praticamente, la riportavano già fatta

Codice: Seleziona tutto

#include <stdio.h>
#include <string.h>
#include <ctype.h>
char * strlwr2 (char *a)
{
  char *ret = a;

  while (*a != '\0'){
	if (isupper (*a)){
		printf("lettera da convertire %c\n", *a);         //stampa esattamente la lettera che voglio
		*a = tolower ((unsigned char)*a);                  //qui la segmentation fault
	}
	++a;
    }

  return ret;
}


int main()
{
char * pippo;
pippo ="cIaO";
printf("stringa %s\n", pippo);
pippo=strlwr2(pippo);
printf("stringa %s\n", pippo);
}
ma al momento dell'esecuzione salta fuori una segmentation fault, precisamente
Segmentation fault (core dumped)
nella riga commentata sopra....



come posso risolvere il mio problema?? grazie
l'errore stà nel fatto che si è dichiarato un puntatore facendolo puntare ad una stringa costante(che non può essere modificata)

soluzione:

Codice: Seleziona tutto

char *pippo;
pippo = (char *)malloc(5);
strcpy(pippo, "cIaO");
pippo = strlwr2(pippo);
Non è proprio ortodosso, perchè la memoria non può più essere liberata, però spiega il concetto.

(b2b)
Navigammo su fragili vascelli
per affrontar del mondo la burrasca
ed avevamo gli occhi troppo belli...
Scrivi risposta

Ritorna a “Programmazione”

Chi c’è in linea

Visualizzano questa sezione: 0 utenti iscritti e 3 ospiti