Domanda sulle librerie di C

di Anonimizzato14946 il
9 risposte
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

  • Strlen e strcat non sono operazioni ma funzioni

    string.h non è una libreria ma un file header

    Quale compilatore usi?
  • Per ora sto usando dev-c++, però ho provato lo stesso codice anche su code::blocks e funzionava senza nessun problema.
  • 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
  • Veramente non può funzionare ... di quale codice parli esattamente?
  • 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
  • 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.
  • 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.
  • 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
  • Col dev-c++ funziona ciò che non dovrebbe e si blocca ciò che funziona....
Devi accedere o registrarti per scrivere nel forum
9 risposte