[C con Clase] arreglo de apuntadores
Steven Richard Davidson
stevenrichard.davidson en gmail.com
Mie Nov 14 20:59:52 CET 2007
Hola rnapoles,
On 11/14/07, rnapoles en ipihlg.rimed.cu <rnapoles en ipihlg.rimed.cu> wrote:
> Salu2 lista llevo un pequeño tiempo aprendiendo a programar en C con unos
> libros que me he conseguido el programa que muestro a continuación
> no da ningún error de sintaxis el problema es en tiempo de ejecución.
> supongo que sea que no deja modificar el arreglo de punteros
> en ese caso que podría hacer para que la función upcase lograra
> modificar dicho arreglo
>
> gracias de antemano.
>
> #include <stdio.h>
> void upcase(char *s);
>
> int main(int argc, char *argv[])
> {
> char a[]="lolo";
> char *b[3]={"hola1","hola2","hola3"};
Aquí estás creando un array de punteros. Sin embargo, estás apuntando
a cadenas literales. Como se trata de valores literales, no puedes
modificarlos y por eso te marca error.
La solución es crear arrays. Esto sería,
char b[3][] = { "hola1", "hola2", "hola3" };
Ahora, 'b' contendrá los arrays, en lugar de apuntar a ellos.
> upcase(a); //aqui todo ok
> upcase(b[2]); //El problema es aqui
> printf("%s\n",a);
> printf("%s\n",b);
No sugiero hacer esto, ya que 'b' es un array de cadenas. Deberías
elegir una cadena en particular. Por ejemplo,
printf( "%s\n", b[0] );
printf( "%s\n", b[1] );
printf( "%s\n", b[2] );
> system("PAUSE");
> return 0;
> }
>
> void upcase(char *s)
> {
> while (*s!='\0')
> {
> if (*s>='a' && *s<='z')
> *s-=32;
> *s++;
> }
> }
Podrías usar la función estándar 'toupper()', declarada en <ctype.h>.
Esto sería,
void upcase( char *s )
{
while( *s ) toupper( *s++ );
}
Espero que esto aclare la duda.
Steven
Más información sobre la lista de distribución Cconclase