[C]Problema nel modificare il contenuto di un vettore di stringhe

di il
3 risposte

[C]Problema nel modificare il contenuto di un vettore di stringhe

Ciao a tutti,

come da titolo ho un problema nel modificare il contenuto di un vettore di stringhe.
L'esercizio in questione richiede di costruire una funzione: questa riceve come argomento un vettore di stringhe di dimensione fissata. La funzione richiede di inserire da tastiera una stringa di testo e, una volta inserita, questa deve essere divisa nelle parole che lo compongono, parole che poi dovranno essere usate per riempire il vettore ricevuto in argomento. La funzione restituisce la dimensione del vettore(int).
Questo è il codice della funzione che ho scritto:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define DIMMAX 100

int elaboraTesto(char *v[]);

int main(){
	int i;
	char *testo[DIMMAX];
	
	i = elaboraTesto(testo);
	return 0;
}

int elaboraTesto(char *v[])
{
	Stringa s;
	int i;
	
	printf("Inserire un testo: ");
	gets(s);
	
	v[i] = strtok(s, " ");
	
	while(v[i] != NULL){
		++i;
		v[i] = strtok(NULL, " ");
	}
	return i;
}
Quando però vado a stampare gli argomenti del vettore testo, non ottengo il risultato sperato ma solamente simboli. Per eseguire questa istruzione ho solamente usato un ciclo for per iterare sul vettore, quindi credo il problema sia nel modo in cui vado ad implementare le parole in testo.
Potreste aiutarmi?

3 Risposte

  • Re: [C]Problema nel modificare il contenuto di un vettore di stringhe

    Non va bene l'uso che hai fatto della strtok. Nel ciclo ogni stringa ottenuta la devi copiare con la strcpy nell' array. Ovviamente dovrai prima allocare lo spazio per assegnarlo ad ogni singolo puntatore dell' array stesso
  • Re: [C]Problema nel modificare il contenuto di un vettore di stringhe

    Gianser, provando il tuo codice, nella compilazione ho ottenuto diversi problemi che elenco di seguito:

    - error: unknown type name ‘Stringa’
    - warning: ‘gets’ is deprecated
    - warning: passing argument 1 of ‘gets’ makes pointer from integer without a cast
    note: expected ‘char *’ but argument is of type ‘int’
    - warning: passing argument 1 of ‘strtok’ makes pointer from integer without a cast
    v = strtok(s, " ");
    ^
    - note: expected ‘char * __restrict__’ but argument is of type ‘int’
    char *strtok
    ^
  • Re: [C]Problema nel modificare il contenuto di un vettore di stringhe

    vuott ha scritto:


    gianser, provando il tuo codice, nella compilazione ho ottenuto diversi problemi che elenco di seguito:

    - error: unknown type name ‘Stringa’
    - warning: ‘gets’ is deprecated
    - warning: passing argument 1 of ‘gets’ makes pointer from integer without a cast
    note: expected ‘char *’ but argument is of type ‘int’
    - warning: passing argument 1 of ‘strtok’ makes pointer from integer without a cast
    v = strtok(s, " ");
    ^
    - note: expected ‘char * __restrict__’ but argument is of type ‘int’
    char *strtok
    ^


    Hai ragione, ho dimenticato di inserire la riga:
    typedef char Stringa[DIMMAX];


    oregon ha scritto:


    Nel ciclo ogni stringa ottenuta la devi copiare con la strcpy nell' array. Ovviamente dovrai prima allocare lo spazio per assegnarlo ad ogni singolo puntatore dell' array stesso


    Oregon, scusami, ma potresti per favore farmi un esempio? Purtroppo non mi è mai capitato di dover affrontare un esercizio del genere e sono in difficoltà.
Devi accedere o registrarti per scrivere nel forum
3 risposte