Autor
|
Tema: Pasar string por referencia o no (Leído 4,894 veces)
|
sora_ori
Desconectado
Mensajes: 269
|
Hola! Estoy haciendo un programa modular y tengo dudas sobre si tengo que pasar una cadena por referencia o no. Yo llamo a la función desde un menú case 1: printf("La frase introducida es %s", introducirFrase ()); break;
Y la función es la siguiente: int introducirFrase(){ char cadena[255]=""; return cadena; }
Al compilar y probar no deja escribir nada, me salta el menú principal. Agradezco la ayuda ![:P](https://foro.elhacker.net/Smileys/chef/tongue.gif)
|
|
|
En línea
|
|
|
|
_Enko
|
Hola, mh... no es referencia el problema tuyo en el codigo que tienes. Pero si, pasar por referencia es lo que buscar. printf("La frase introducida es %s", introducirFrase());
int introducirFrase(){
introducirFrase no retorna un char*. char cadena[255]=""; printf("Frase: "); gets(cadena); return cadena;
char cadena[255] es una variable local. Desaparece al terminar la funcion. return debe devolver int en tu caso. Algo asi te deberia de servir: void LeerCadena(char* cadena_){ gets(cadena_); } int main(int argc, char *argv[]) { char cadena[255]; LeerCadena(cadena); // $cadena[0] == cadena printf("%s", cadena);
Saludos.
|
|
« Última modificación: 11 Febrero 2015, 21:42 pm por _Enko »
|
En línea
|
|
|
|
rir3760
Desconectado
Mensajes: 1.639
|
Ademas de lo indicado por _Enko (retornar en base a la variable local "cadena" debe ser el error principal) deberías evitar el uso de llamadas a system, gets y el uso de la biblioteca conio de Borland, mas información en la pagina |Lo que no hay que hacer en C/C++. Nivel basico|. Y si envías un texto a la salida estándar con:
La cadena debe terminar con el carácter de avance de linea (para ello lo mas sencillo es utilizar puts en lugar de printf) o bien vacías explícitamente el bufer de la salida estándar con fflush(stdout). Un saludo
|
|
|
En línea
|
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly. -- Kernighan & Ritchie, The C programming language
|
|
|
sora_ori
Desconectado
Mensajes: 269
|
Buenas compañeros, Sigo teniendo problemas a la hora de leer Strings, si leo caracteres no tengo problema pero como quiera escribir un Strings con una frase con espacios me da el siguiente error: No me permite escribir nada en el Stringprintf("Introduce el String: "); printf("\nLa frase sin la primera palabra: %s\n", quitarPrimera (frase ));
char* quitarPrimera(char frase[20]); int main(){ char frase[20];
Creo que será que tengo que recoger de otra forma la cadena porque con un SCANF puedo pero no me permite coger frases con espacios y no es el objetivo que estoy buscando. Gracias!!!
|
|
|
En línea
|
|
|
|
rir3760
Desconectado
Mensajes: 1.639
|
Creo que será que tengo que recoger de otra forma la cadena porque con un SCANF puedo pero no me permite coger frases con espacios y no es el objetivo que estoy buscando. Con la información que muestras no es posible ayudarte, por favor publica el código fuente completo. Un saludo
|
|
|
En línea
|
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly. -- Kernighan & Ritchie, The C programming language
|
|
|
sora_ori
Desconectado
Mensajes: 269
|
Buenas, Ya he podido solventar el problema de leer un String, ahora tengo problemas al pasar por referencia, dejo el código: #include <stdio.h> #include <stdlib.h> #include <string.h> int frecuencia(char *, char letra); int main(){ int opcion=1; char frase[20], letra; while(opcion!=5){ printf("1. Introducir frase\n"); printf("2. Frecuencia caracter\n"); printf("3. Quitar primera palabra\n"); printf("4. Sin espacios en blanco\n"); printf("\n\nEscoge una opcion: "); switch (opcion){ case 1: printf("Introduce una frase "); gets(frase ); // Guardamos el String printf("\n\nLa frase introducida es:\n\n\n"); break; case 2: printf("\n\nQue letra quieres buscar en la cadena? "); scanf("%c", &letra ); // guardamos la letra que queremos buscar en la cadena printf("La letra %c aparece %i veces repetidas", letra , frecuencia (frase ,letra )); break; case 3: //printf("\nLa frase sin la primera palabra: %s\n", quitarPrimera(frase)); break; case 4: //printf("\nLa frase sin espacio es: %s\n", sinEspacios(frase)); break; case 5: return 0; break; default: printf("\nOpcion incorrecta! Intenta de nuevo"); } } return 0; }// fin main // Función para comprobar cuantas veces se repite una letra int frecuencia(char *frase[20], char letra){ int i, cont=0; // la variable contador será la encargada de sumar cuando se encuentre la letra for (i=0; frase[i] != '\0'; i++){ // recorremos con un for hasta encontrar el espacio en blanco if (frase[i] == letra){ // si el punto de la cadena es = a la letra que queremos encontrar cont++; // sumara el contador } } return cont; // retornaremos las veces que se ha encontrado el caracter que hemos buscado en el for }
Al leer un String y pasarlo por referencia se pone " & " delante de la variable pero me da error. Gracias
|
|
« Última modificación: 18 Febrero 2015, 18:38 pm por sora_ori »
|
En línea
|
|
|
|
theluigy13etv
Desconectado
Mensajes: 179
Primero se hace, después se mejora
|
Si te das cuenta, en el prototipo de tu función declaraste como char *. De la misma forma debes hacerlo en la implementación. Cambia esto que está así: int frecuencia(char *frase[20], char letra)
Por esto: int frecuencia(char *frase, char letra)
|
|
|
En línea
|
|
|
|
sora_ori
Desconectado
Mensajes: 269
|
Ya lo he podido solucionar TODO! Gracias por la ayuda compañeros!! ![:)](https://foro.elhacker.net/Smileys/chef/smiley.gif) Saludos
|
|
« Última modificación: 19 Febrero 2015, 21:52 pm por sora_ori »
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
warning al pasar por referencia una variable local.
Programación C/C++
|
botella
|
6
|
4,410
|
8 Julio 2010, 07:41 am
por carlitos_jajajajaja
|
|
|
¿Cómo puedo pasar dos enteros por referencia?
Java
|
theluigy13etv
|
2
|
2,694
|
16 Abril 2012, 20:04 pm
por theluigy13etv
|
|
|
Pasar matriz char a una función como referencia
Programación C/C++
|
KISKE
|
2
|
7,298
|
18 Junio 2013, 13:07 pm
por KISKE
|
|
|
pasar por referencia un puntero
Programación C/C++
|
m@o_614
|
2
|
7,107
|
18 Enero 2014, 18:13 pm
por rir3760
|
|
|
[Duda] Pasar struct por referencia
Programación C/C++
|
jaxoR
|
9
|
5,597
|
27 Agosto 2014, 02:50 am
por rir3760
|
|