PDA

Visualizza la versione completa : [C] Problema puntatori


Dreamer89
24-10-2009, 15:26
Salve. Devo creare un programma che dato un testo, deve restituire la parola pi lunga e la sua lunghezza, ma ho un problema di puntatori. Praticamente, al printf viene stampato: (null) e la lunghezza... ma perch longestWord diventa null? Non capisco o_O Vorrei evitare di usare variabili globali...


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

void getMaxLengthWord (char *text, char *longestWord, int *maxLength);

int main()
{
char text[] = "rosso verde blu";
char *longestWord;
int maxLength;

getMaxLengthWord (text, longestWord, &maxLength);

printf ("%s %d\n", longestWord, maxLength);

return 0;
}

void getMaxLengthWord (char *text, char *longestWord, int *maxLength)
{
int counter = 0;
*maxLength = 0;

char *word = strtok (text, " ");
while (word != NULL)
{
int length = strlen (word);

if (length > *maxLength)
{
*maxLength = length;
longestWord = word;
}

word = strtok (NULL, " ");
}
}

Dreamer89
24-10-2009, 15:33
Ho risolto facendo restituire un puntatore char alla funzione :D

Grazie mille lo stesso, potete chiudere

oregon
24-10-2009, 15:37
Non puoi modificare un parametro passato se non lo passi con un puntat.
Anche il puntatore, a sua volta, deve essere passato tramite puntatore.

In rosso le modifiche (mancano anche alcune inizializzazioni importanti ...).



void getMaxLengthWord (char *text, char **longestWord, int *maxLength);

int main()
{
char text[] = "rosso verde blu";
char *longestWord = NULL;
int maxLength = 0;

getMaxLengthWord (text, &longestWord, &maxLength);

printf ("%s %d\n", longestWord, maxLength);

return 0;
}

void getMaxLengthWord (char *text, char **longestWord, int *maxLength)
{
int counter = 0;
*maxLength = 0;

char *word = strtok (text, " ");
while (word != NULL)
{
int length = strlen (word);

if (length > *maxLength)
{
*maxLength = length;
*longestWord[color=red] = word;
}

word = strtok (NULL, " ");
}
}

Dreamer89
24-10-2009, 15:46
Originariamente inviato da oregon
Non puoi modificare un parametro passato se non lo passi con un puntat.
Anche il puntatore, a sua volta, deve essere passato tramite puntatore.

In rosso le modifiche (mancano anche alcune inizializzazioni importanti ...).



void getMaxLengthWord (char *text, char **longestWord, int *maxLength);

int main()
{
char text[] = "rosso verde blu";
char *longestWord = NULL;
int maxLength = 0;

getMaxLengthWord (text, &longestWord, &maxLength);

printf ("%s %d\n", longestWord, maxLength);

return 0;
}

void getMaxLengthWord (char *text, char **longestWord, int *maxLength)
{
int counter = 0;
*maxLength = 0;

char *word = strtok (text, " ");
while (word != NULL)
{
int length = strlen (word);

if (length > *maxLength)
{
*maxLength = length;
*longestWord[color=red] = word;
}

word = strtok (NULL, " ");
}
}


Il metodo "puntatore di puntatore" non l'ho mai approvato, troppo complicato! Preferisco la funzione che restituisce un puntatore :)

oregon
24-10-2009, 15:56
Originariamente inviato da Dreamer89
Il metodo "puntatore di puntatore" non l'ho mai approvato, troppo complicato!

Veramente mi sembra abbastanza semplice e utile in tanti casi ...

Loading