Domanda sulle librerie di C

di il
9 risposte

Domanda sulle librerie di C

Mi sapete dire perchè anche se uso operazioni come strlen o strcat, senza includere la libreria string.h, quest'ultime funzionano lo stesso??

9 Risposte

  • Re: Domanda sulle librerie di C

    Strlen e strcat non sono operazioni ma funzioni

    string.h non è una libreria ma un file header

    Quale compilatore usi?
  • Re: Domanda sulle librerie di C

    Per ora sto usando dev-c++, però ho provato lo stesso codice anche su code::blocks e funzionava senza nessun problema.
  • Re: Domanda sulle librerie di C

    In realta' ha funzionato piu' per c..o che per fortuna.
    O, come dico di solito: ha funzionato per sbaglio, che e' il caso peggiore dei malfunzionamenti.

    Prova a passare a strlen, o alle altre funzioni che stai provando, dei numeri a caso (sia interi che double, non zero pero'), e controlla se continuano a funzionare.

    Altra prova che puoi fare e': passa alle funzioni un numero diverso di parametri (sia di piu' ma sopprattutto di meno, o nessuno).



    E se per caso non dovesse funzionare, prova a proporre una spiegazione
  • Re: Domanda sulle librerie di C

    Veramente non può funzionare ... di quale codice parli esattamente?
  • Re: Domanda sulle librerie di C

    oregon ha scritto:


    Veramente non può funzionare ... di quale codice parli esattamente?
    Se il sorgente ha estensione ".c" e non ".cpp", viene utilizzato il compilatore C, con le regole del C.
    E il compilatore C e' di bocca molto buona: se una funzione non e' stata definita precedentemente, lui al piu' genera un warning. Tanto poi sara' il linker a risolvere il simbolo.
    Ora solo se il nome non esiste,e il linker non la trova, l'eseguibile non viene generato.

    Se invece passi parametri a casaccio, al compilatore C va bene lo stesso, il liker comunque risolve il simbolo, e, se hai fortuna, l'applicazione schianta, ma se sei sfortunato, l'applicazione sembra funzionare con risultati che, se hai fortuna, non hanno senso, ma se sei sfortunato, sono pure plausibili.

    E quest'ultimo e' l'incubo dei programmatori
  • Re: Domanda sulle librerie di C

    Ok grazie per le risposte che mi avete dato.

    Qui sotto vi metto un codice che ho scritto per costruire un piccolo sistema di password, che utilizza la funzione strcmp:

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

    int main(int argc, char *argv[])
    {
    int risultato, num_tent=0;
    char password[]="mago merlino";
    char tentativo[20];

    printf("Digita la password - hai ancora 3 tentativi: ");

    do
    {
    gets(tentativo);
    risultato = strcmp(password, tentativo);
    num_tent++;
    if (risultato == 0)
    {
    printf("Accesso consentito\n\n");
    }
    else
    {
    printf("ACCESSO NEGATO\n\n");

    switch(num_tent)
    {
    case 1:
    printf("Digita la password - hai ancora 2 tentativi: ");
    break;
    case 2:
    printf("Digita la password - hai ancora 1 tentativo: ");
    break;
    case 3:
    printf("Siamo spiacenti ma hai esaurito il numero di tentativi\n\n");
    break;
    }

    }
    } while (risultato != 0 && num_tent != 3);

    system("PAUSE");
    return 0;
    }

    Il codice come già detto funziona tranquillamente anche senza string.h.
  • Re: Domanda sulle librerie di C

    Sì, se compili come .C (ovvero con le regole del C), essendo queste meno restrittive, non hai indicazioni particolari sulla funzione che usi a patto che questa sia trovata dal linker tra quelle della libreria standard. E dato che la strlen con la stessa firma viene trovata, non hai problemi.
  • Re: Domanda sulle librerie di C

    Dynamo96 ha scritto:


    Il codice come già detto funziona tranquillamente anche senza string.h.
    Diffida sempre del tranquillamente: e' la sirena che porta alla perdizione
  • Re: Domanda sulle librerie di C

    Col dev-c++ funziona ciò che non dovrebbe e si blocca ciò che funziona....
Devi accedere o registrarti per scrivere nel forum
9 risposte