Newsgroup: it.comp.lang.c
Titolo: come passare char st[10][80] a una funzione

ciao a tutti
 
io ho
 
int main (int argc, char **argv)
{
  char st[][80] = {"zero", "uno",
                           "due", "tre",
                           "", "" };
 
 return (0);
}
 
come posso passare l'array di strighe st ad una funzione?
 
int prova (const char **st) non va ... potete consigliarmi?
 
e la seguente espressione va bene?
size_t indici = sizeof st / sizeof st[0]; dovrebbe darmi il numero
dell'indice, che per l'esempio è 6...
 
Grazie
 
Tanith


 
se ho capito la domanda, come per tutti gli array statici vale la:
#elementi = sizeof(array) / sizeof(array[0]);
 
Ciao!

 int prova (const char **st) non va ... potete consigliarmi?
 
Consiglio di incollare l'errore, la stessa dichiarazione standard "char 
* argv[]" mostra come sia possibile passare un array di stringhe.

@FtM
come hai consigliato funziona, grazie mille
 
@Andrea D'Amore
ti posto l'esercizio
[code]
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
#define MAXLINEA 80
 
void prova (const char **st);
 
int main (int argc, char **argv)
{
	char a[][MAXLINEA] = {"una casa", "la via",
						  "mia radio", "tua rivista",
						  "", ""};
	size_t x = 0;
	size_t lung = (sizeof a / sizeof a[0]);
 
	while (x < lung)
	{
		printf ("a[%d] --> %s\n", x, a[x]);
		x++;
	}
 
	prova (a);
 
	return (0);
}
 
void prova (const char **st)
{
	size_t x = 0;
	size_t lung = (sizeof st / sizeof st[0]);
 
	while (x < lung)
	{
		printf ("st[%d] --> %s\n", x, st[x]);
		x++;
	}
}
[/code]
 
e questo è il risultato della compilazione
 
[code]
tanith@tanith-lab ~/Scrivania/Link to pattern_file1_file2/
ricercaStringa $ gcc -g -Wall testArrayStringa.c -o testArray
testArrayStringa.c: In function ‘main’:
testArrayStringa.c:25:2: warning: passing argument 1 of ‘prova’ from
incompatible pointer type
testArrayStringa.c:9:6: note: expected ‘const char **’ but argument is
of type ‘char (*)[132]’
[/code]
 
e lanciandolo con ./testArray mi dà il segment error
 
uso GNU/Linux Mint 12 e il gcc vers. 4.6.1 da terminale e nano come
editor
 
Tanith

Penso che Andrea D'Amore intendesse una cosa del genere:
 
void prova (int argc, char **argv)
{
	for(int = 0; i < argc ; i++)
	{
		const char* p = argv[i];
		printf("%d ----> %s", i, p);
	}
 
}
 
 
Cordiali Saluti
 
Xeus32



 
Più che altro penso che Andrea intendesse che normalmente un array di
stringhe lo definisci come:
 
const char *st[] = { "una casa", "la via", "mia radio", "tua rivista",
"", "" };
 
quindi senza dare dimensione fissa alle stringhe.
Questo porta a definire la funzione prova come:
 
void prova (const char * const st[]);
 
o più semplicemente come:
 
void prova(const char **st);
 
Ciao!

 quindi senza dare dimensione fissa alle stringhe.
 
In realtà intendevo che piuttosto che "non va" si deve incollare il 
comando dato e il risultato ottenuto.
 
Tra le due proposte andrei più con questa seconda, ma mi sembra un modo 
sbagliato di valutare la lunghezza dell'array, in prova() lung sarà 1 se 
il parametro st è dichiarato come char **st o 0 se dichiarato come char 
st[][MAXLINE].

 st[][MAXLINE].
 
Sì beh, questo è un "problema" che hai su qualsiasi array: quando lo
passi per usarlo in qualche modo devi conoscere la sua dimensione.
Ciao!