Help!!! stringhe

di il
8 risposte

Help!!! stringhe

Ho appena studiato le stringhe in linguaggio C e volevo provare a fare un programma semplice semplice per caricare una stringa il codice è:
#include <stdio.h>
#include <string.h>
int main () {
	int n;
	char s[n+1];
	printf ("inserisci lunghezza stringa = ");
	scanf ("%d",&n);
	printf ("inserisci stringa = ");
	scanf ("%s",s);
	printf ("la stringa = %s",s[n]);
	return main();
}
uso dev-c++ e appena lo compilo va in esecuzione il programma e mi da subito errore. La cosa strana è che neanche mi fa inserire il posto della stringa...
Attendo notizie grazie

8 Risposte

  • Re: Help!!! stringhe

    Quando la vai a scrivere devi levare l'indice tra parentesi quadre
    e per queste semplici operazioni non è necessario il file di intestazione string.h
    tuttavia quello non è un errore,mentre tentare di stampare con la specifica %s la variabile s[n] lo è
  • Re: Help!!! stringhe

    Non puoi dichiarare un array cosi.. o usi l'allocazione dinamica, oppure devi fissare una costante numerica. Inoltre in quel caso, se pure fosse corretto (cosa che non è) creeresti un array di un solo elemento perché in quel momento n è zero. Prima chiedi n all'utente, verifica che sia positivo, e poi allochi dinamicamente l'array
  • Re: Help!!! stringhe

    Questo è vero,però prova e vedrai che non ti dà errore..per questo non l'ho menzionato
    comunque è vero,l'ho visto anche in un atlro tuo post che hai quest'abitudine che ti consiglio di correggere,il C non permette di dichiarare vettori con dimensioni dinamiche,nella dichiarazione ci devi mettere un numero intero o al più fai cosi:
    #define size 20

    int vet[size];
  • Re: Help!!! stringhe

    Ah ok grazie mille ad entrambi
    Ma non ho capito il perchè non si possa mettere una dimensione dinamica (se il C ha una memoria dinamica)...cioè tutte le volte se devo mettere la dimensione di un array devo utilizzare la funzione "malloc" oppure dichiararlo subito??
  • Re: Help!!! stringhe

    Penso che non ti sia ben chiara l'uso della funzione malloc
    si usa con i puntatori,e in particolare ,con le strutture ricorsive per implementare pile,liste o code ecc
    è vero che in C puntatori e vettori sono quasi interscambiabili,ma in questo caso malloc non è concettualmente applicabile ai vettori...
    ti faccio un esempio
    se hai una
    struct stack
    {
    int nodo;
    struct stack *ptr;
    };

    typedef struct stack STACK;
    typedef STACK *STACKptr;

    STACKptr pila;

    e vuoi aggiungere un nodo alla tua "pila",allora scrivi una funzione push(il metodo per aggiungere nodi in testa alla pila) nella quale userai una nuova variabile puntatore alla struttura STACKptr,ad esempio "nuovoptr", e prima di aggiungerla alla pila fai:
    nuovoptr = malloc(sizeof(STACK);
    in questo modo sarà restituito l'indirizzo di una locazione di memoria libera da usare per un nuovo modo...qui è necessaria questa funzione in quanto il tuo programma avrà bisogno di altra memoria a runtime,mentre nel caso di un vettore non ha senso usare questa funzione,lo capisci se fai riferimento a questo esempio....spero di essere stato chiaro
  • Re: Help!!! stringhe

    Piranha ha scritto:


    mentre nel caso di un vettore non ha senso usare questa funzione
    ?
    I vettori sono puntatori che puntano al primo elemento dell'array. Se vuoi allocare dinamicamente spazio per un vettore di n elementi, puoi fare
    int *array = (int*) malloc(sizeof(int)*n);
    E poi puoi utilizzare normalmente l'array al solito modo.
  • Re: Help!!! stringhe

    maffo95 ha scritto:


    ah ok grazie mille ad entrambi
    Ma non ho capito il perchè non si possa mettere una dimensione dinamica (se il C ha una memoria dinamica)...cioè tutte le volte se devo mettere la dimensione di un array devo utilizzare la funzione "malloc" oppure dichiararlo subito??
    Il c ha anche la memoria nello stack oltre che nell heap, devi dunque specificare cosa vuoi utilizzare.
    con la malloc() crei spazio nell heap, con la realloc() la puoi ridimensionare e con la Free() liberare.

    TUTTE le variabili del c che NON vengono inizializzate hanno valore indefinito, nel tuo caso n prenderàun valore casuale negativo causando il crash immediato.

    Come poi già suggerito devi buttare nel cesso dev-c++, usando altro ambiente con altro compilatore avresti ottenuto dei warning su quel codice!
    Ora NON STAI IMPARANDO IL C MA IL C PER DEV, il dev non funziona con il normale codice c ma bisogna inserirci errori per farlo funzionare, ecco perché ti avevo linkato quella pagina, per farti capire che noi non parliamo solo per far aria
  • Re: Help!!! stringhe

    GRAZIE MILLE A TUTTI gentilissimi e veramente disponibili grazie
Devi accedere o registrarti per scrivere nel forum
8 risposte