Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    mistero della fede...!! help ..

    per quelche motivo a me oscuro questo prog produce output diverso su linux e sul macosx86 su intel
    (mac su pc di casa non mac...)
    se mi sapete spiegare il perche vi ringrazio molto .!! io non ne esco sto impazzendo..
    grazie anticipatamente !!

    macosx86----------


    --->piove col sole
    --->piove col mare
    --->piove di notte
    --->piove poco sole
    ---------------------------------
    ---> qipvf dom tome
    ---> (null)
    ---> qipvf ei!nptue
    ---> qipvf qodo!splf
    ---> // come si puo notare qui la stinga non viene stampata !!! =O
    --->(null)
    --->qipvf ei!nptue
    --->qipvf qodo!splf


    ------------------------------------------------------------------------------------------------------

    Linux-------
    --->piove col sole
    --->piove col mare
    --->piove di notte
    --->piove poco sole
    ---------------------------------
    ---> qipvf dom tome
    ---> (null)
    ---> qipvf ei!nptue
    ---> qipvf qodo!splf
    ---> qipvf dom tome // qui tutto ok !!!!
    --->(null)
    --->qipvf ei!nptue
    --->qipvf qodo!splf



    ----->


    #include <stdlib.h>
    #include <stdio.h>
    #include <string.h>

    void funz(char **parray);
    int main(){
    int c;
    char* str1 = calloc (10,(sizeof (char)));
    char* str2 = calloc (10,(sizeof (char)));
    char* str3 = calloc (10,(sizeof (char)));
    char* str4 = calloc (10,(sizeof (char)));
    char** stringa;
    stringa = (char **) calloc (4,(sizeof (char*)));
    strcpy(str1, "piove col sole");
    strcpy(str2, "piove col mare");
    strcpy(str3, "piove di notte");
    strcpy(str4, "piove poco sole");
    *stringa = str1;
    *(stringa+1) = str2;
    *(stringa+2) = str3;
    *(stringa+3) = str4;
    printf("\n\n\n");
    printf("--->%s \n",*stringa);
    printf("--->%s \n",*(stringa+1));
    printf("--->%s \n",*(stringa+2));
    printf("--->%s \n",*(stringa+3));
    printf("---------------------------------\n");
    funz(stringa);
    printf("--->%s \n",*stringa);
    printf("--->%s \n",*(stringa+1));
    printf("--->%s \n",*(stringa+2));
    printf("--->%s \n",*(stringa+3));
    printf("---------------------------------\n");


    }
    void funz(char **array){
    int c,d;
    free (array[1]);
    array [1] = NULL;
    for (c = 0; c <= 3; c++){
    if (array [c] != NULL){
    d=0;
    while (array [c][d] != '\0'){
    array [c][d]++;
    d+=2;
    }
    }
    printf("---> %s\n", array[c] );
    }
    }


    non risco ad allegare sorgente ...

  2. #2
    Hai allocato poca memoria : 10 char per ogni stringa sono troppi pochi,
    mettine 16 (la dimensione della stringa più lunga, più uno per il terminatore)
    e non dovresti avere più problemi.

    Ma potresti anche fare in modo che il programma allochi automaticamente
    solo la memoria che serve.

    codice:
    int main()
    {
    	int c;
    	char *text1="piove col sole";
    	char *text2="piove col mare";
    	char *text3="piove di notte";
    	char *text4="piove poco sole";
    	char *str1 = calloc( strlen( text1)+1, sizeof(char));
    	char *str2 = calloc( strlen( text2)+1, sizeof(char));
    	char *str3 = calloc( strlen( text3)+1, sizeof(char));
    	char *str4 = calloc( strlen( text4)+1, sizeof(char));
    	char **stringa;
    	stringa = (char **) calloc (4,(sizeof (char*)));
    	strcpy(str1, text1);
    	strcpy(str2, text2);
    	strcpy(str3, text3);
    	strcpy(str4, text4);
    01010011 01100001 01101101 01110101 01100101 01101100 01100101 01011111 00110111 00110000
    All errors are undocumented features waiting to be discovered.

  3. #3
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462

    Re: mistero della fede...!! help ..

    "piove col sole" e' lungo 14 caratteri + il terminatore 15 ... e tu allochi solo 10 caratteri ... cosi' come per le altre frasi ... mi sembra che sia chiaro il motivo del problema ...

    P.S. Occhio al titolo del thread ... dai un'occhiata al regolamento
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304

    Moderazione

    Ho corretto il titolo. Leggi il regolamento a riguardo.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  5. #5
    .... Scusate ... il titolo ... non ci avevo pensato ....
    come non avevo pensato al poco spazio allocato da calloc ..
    era abbastanza ovvio .. =) sorry

    resta il fatto che cmq linux stampava lostesso la frase e mac no ....
    bho :master:

    grazie !!

  6. #6
    sul comportamento indefinito riguardante a queste situazioni si è già ampiamente discusso.
    ciao
    sergio

  7. #7
    a immagino ... infatti non troverò risposta.
    grazie a tutti !!!! ripasserò a rompere sicuramente =P

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Originariamente inviato da heretic99
    a immagino ... infatti non troverò risposta.
    Questa non l'ho capita ... comunque ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  9. #9
    Originariamente inviato da heretic99
    a immagino ... infatti non troverò risposta.
    grazie a tutti !!!! ripasserò a rompere sicuramente =P
    non capisco perchè un comportamento indefinito del linguaggio C debba sollevare sempre delle perplessità.
    Il comportamento è indefinito dal linguaggio e quindi implementato dal compilatore autonomamente. Essendo i compilatore a cui ti riferisci diversi ecco lì il comportamento diverso, in questa situazione non definita a priori.
    ciao
    sergio

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.