Estás en: Inicio >> Foros >> Informática >> Programación
Programación /

Duda existencial en C (no C++)

Participa en el tema Duda existencial en C (no C++) en el foro Programación.
Hay algo que nunca supe si es posible hacer o no.... Supongamos que tengo una ...

Buscar en este tema:
1 2 >
 
  •  
    Locutus_ escribió el 02/07/2003 a las 12:12 hs.
     
    ¿Mensaje inapropiado?
    #1 Duda existencial en C (no C++)
    Hay algo que nunca supe si es posible hacer o no....

    Supongamos que tengo una funcion:

    void Funcion(char *String)
    {

    ... ... ... ... ...

    }

    Supongamos que le paso "variable" que es un string de 20 (char variable[20]).

    Ahora la duda:
    Hay alguna manera de saber dentro de "Funcion" el tamaño de "String"???? O sea.... fuera, con un sizeof se sabe el tamaño, pero dentro el sizeof da el tamaño pero del puntero.

    Se entiende??
    gracias
    +
     
    0
    Me gusta
     
    http://www.psicofxp.com/forums/programacion.313/118679-duda-existencial-en-c-no-c.html
    | Más
  • Aztor escribió el 02/07/2003 a las 22:09 hs. ¿Mensaje inapropiado?

    #2

    Supongamos que le paso "variable" que es un string de 20 (char variable[20]).
    Creo que tu error esta aca. Vos no le pasas el string, le pasas la direccion de comienzo del string.

    Podes, si es un array de caracteres (o string) el cual estas seguro qeu terminal en null ( (char) 0 ) llamar a la funcion strlen.

    int strlen (char *);

    la cual te devuelve la cantidad de caracteres que posee el string, hasta el null. Ahora si vos lo que queres, es saber el largo que podria tener el string, al menos en C estas perdido. Deberias pasartelo como parametro entre funciones, o colocarlo en una variable global.

    Aunque parezca una contradiccion, esta es una de las flexibilidades de C. Podes escribir donde quieras, aunque pises datos, lo cual te permite hacer muchas cosas. Como decia un profesor: "C no es a prueba de boludos".
    Me gusta este mensaje
  • Locutus_ escribió el 03/07/2003 a las 16:37 hs. ¿Mensaje inapropiado?

    #3

    Mensaje original de Aztor
    [b] Creo que tu error esta aca. Vos no le pasas el string, le pasas la direccion de comienzo del string.
    No, justamente es lo que nesecito, pasarle el puntero (o sea que le paso la direccion de memoria).

    Mensaje original de Aztor
    [b] int strlen (char *);
    No me sirve, ya que ese "string" tiene null'es en el medio.

    Mensaje original de Aztor
    [b] Deberias pasartelo como parametro entre funciones
    Es lo que hice.

    Mensaje original de Aztor
    Aunque parezca una contradiccion, esta es una de las flexibilidades de C. Podes escribir donde quieras, aunque pises datos, lo cual te permite hacer muchas cosas. Como decia un profesor: "C no es a prueba de boludos".
    Es cierto.... C es lo mas!!!


    Gracias igual... me confirmaste lo que yo sabia (o al menos lo que creia )
    Me gusta este mensaje
  • Aztor escribió el 03/07/2003 a las 17:42 hs. ¿Mensaje inapropiado?

    #4

    No me sirve, ya que ese "string" tiene null'es en el medio.
    Creo que confundis los conceptos. si vos tenes:

    char *str[100];
    strcpy(str, "HOLA");

    el string tiene 4 de largo. El que tiene 100 es el array de caracteres. Un string se acaba cuando aparece el \0.
    Me gusta este mensaje
  • Locutus_ escribió el 03/07/2003 a las 19:46 hs. ¿Mensaje inapropiado?

    #5

    Mensaje original de Aztor
    Creo que confundis los conceptos. si vos tenes:

    char *str[100];
    strcpy(str, "HOLA");

    el string tiene 4 de largo. El que tiene 100 es el array de caracteres. Un string se acaba cuando aparece el \0.
    Exacto, no confundi nada....

    En tu ejemplo, si tengo "HOLA\0chau\0..........etc........."

    El strlen me da 4 y yo quiero el 100!!!!
    Me gusta este mensaje
  • Aztor escribió el 03/07/2003 a las 20:03 hs. ¿Mensaje inapropiado?

    #6

    Y donde esta el problema ? Si las variables estaticas las definis vos... el tamaño lo sabes. Aunque lo pidas dinamicamente al heap, tambien sabes el tamaño. No veo donde tenes el problema. No me gustaria repetir la frase de mi profesor :-)
    Me gusta este mensaje
  • Locutus_ escribió el 04/07/2003 a las 12:43 hs. ¿Mensaje inapropiado?

    #7

    Simple....
    Se supone que cuando programas (bien), vos haces una funcion que funciona en general para dotos los casos, y al no saber el tamaño total y segun lo que hagas en la funcion, nesecitas saber hasta donde "escribir" sin pisar memoria.
    Me gusta este mensaje
  • Aztor escribió el 04/07/2003 a las 12:57 hs. ¿Mensaje inapropiado?

    #8

    Las funciones tan genericas de las que hablas alocan dinamicamente la memoria segun lo que necesitan. En caso de que no desees que aloque dinamicamente, si no que ya reciba una direccion de comienzo, pasale a demas de un puntero al tipod e dato, un sizeof del tamaño que definiste.

    Si tenes problemas con C, proba de programar en Perl. No es tan flexible como C pero te va a ahorrar esto que aparentemente te trae problemas. Por supuesto que estos beneficios a bajo nivel son restricciones, pero quiza no te afecten. Otra contra de Perl es que los ejecutables poseen un runtime.
    Me gusta este mensaje
  • Locutus_ escribió el 04/07/2003 a las 14:13 hs. ¿Mensaje inapropiado?

    #9

    Mensaje original de Aztor
    ...un sizeof del tamaño que definiste.
    Como dije varios post arriba, de esa fosma lo solucione.

    Mensaje original de Aztor
    Si tenes problemas con C, proba de programar en Perl.
    No sirve.... lo que yo programo no es una PC y solo soporta C.

    Edit: malloc en lo que yo programo no esta implementado.
    Me gusta este mensaje
  • ROP escribió el 06/07/2003 a las 21:58 hs. ¿Mensaje inapropiado?

    #10

    aztor sos un tipo de mucha paciencia, te felicito, y si aztor es por
    piazzolla ensima tenes buen gusto..muy bien!

    ah..locutus me aburriste....
    Me gusta este mensaje
1 2 >
Estás en: Inicio >> Foros >> Informática >> Programación


Estadísticas del tema
  • 10 RESPUESTAS
  • 530 VISTAS
  • 3 USUARIOS RESPONDIERON
 
Ir arriba
Contacto | Acerca de | Ayuda | Términos Legales | privacidad | Pautas de convivencia | Mapa de los foros | TrabajÁ con nosotros
©2008 Psicofxp.com S.A. - Todos los derechos reservados
Certifica IAB