Newsgroup: it.comp.programmare.win32
Titolo: trasferimento array a funzione

/*salve a tutti sono un principiante (mooolto principiante)*/
/*dilettante(mooolto dilettante) autodidatta e ho un*/
/*problema nel trasferire [array] di variabili alle*/
/*funzioni;di seguito ho postato il "listato"(listatino)*/
/*e il mess. di errore del compilatore e se qualcuno potesse*/
/*darmi qualche piccola dritta gliene sarò molto grato*/
/*P.S. la funzione chiamata 'confstr()'serve a confrontare */
/*due stringhe char in questo caso immesse da tastiera*/
#include"/Program Files/Miracle C/include/stdio.h"
main()
{
char stringa[10],stringb[10];
printf("\ninserire stringa:");
gets(stringa);
printf("\ninserire stringb:");
gets(stringb);
if (confstr(stringa,stringb)) printf("\nSTRINGHE INDENTICHE");
else printf("\nSTRINGHE DIFFERENTI");
}
confstr(char a[],char b[])
{
int lenght,time;
if (strlen(a)>strlen(b)) lenght=strlen(a);
else lenght=strlen(b);
for(time=0;time!=lenght;time++)
  {
  if((int)a[time]-(int)b[time])
   return(0);
  }
return(1);
}
/**************************************************************/
/*Miracle C Compiler (r3.1), written by bts.*/
/*Compiling c:\documenti\confstr.c*/
/*main*/
/*c:\documenti\confstr: 43,44: bad type in function confstr*/
/*'confstr(char a[],char b[]) { int t,time'*/
/*aborting compile, too many errors*/


wrote:

Prima di tutto : hai dichiarato il prototipo ? 
Non dovresti mettere prima del main , il prototipo della funzione ?
Cioè prima del main devi mettere : 
confstr(char a[],char b[]);
Io non sono un esperto pero la farei cosi la tua funzione :
int confstr(const char *a,const char *b)


/*salve a tutti sono un principiante (mooolto principiante)*/

Scusa , mi vengono in mente alcune cose :
1 ) se le stringhe hanno lunghezza differente allora sono diverse
quindi il confronto non va + fatto , quindi la tua funzione diverrebbe
:
int confstr(const char *a,const char *b)
{
if (strlen(a)!=strlen(b)) return 0;
for(int time=0;time<strlen(a);time++)
  {
  if( a[time]!=b[time] ) return 0;
  }
return 1;
}
Altra cosa : time deve andare da 0 a lunghezzastringa-1 , altrimenti
sfori.Quindi ci vuole un < e non un uguale nella condizione del for.
Perche converti i char in int ?

Perche converti i char in int ?
/*il ciclo for 'dominato' da time cessa al momento in cui time==lenght*/
/*infatti se leggi bene nella condizione da verificare c'è:*/
/*for(time=0;time!=lenght;time++)*/
/*e quindi non dovrebbe sforare dall'array.*/
/*converto i char in int cosi li posso sottrarre l'uno all'altro*/
/*e verificare eventuali differenze.*/
/*Tuttavia non so se era una operazione evitabile*/
/*scusa avrei una domanda:*/
/*int confstr(const char *a,const char *b)*/
/*Perchè devo mettere dei puntatori degli array nella dichiarazione?*/
/*su tutti i manuali che ho visto la dichiarazione è con char[]*/
/*grazie di tutto*ciao*/

c:\documenti\confstr: 43,44: Parse Error, expecting `LOCAL' or `GLOBAL' or
`LSTATIC' or `NAME'
'int confstr(const char *a,const char *b) { int lenght,time'
aborting compile, too many errors
/*ho provato il tuo codice ma non viene compilato e quello che c'č sopra č*/
/*il mess di errore che mi restituisce*/
/*hai qualche idea del perchč?*//*ciao*/


Allora , innanzitutto mi scuso perchè non avevo tenuto conto che hai
un compilatore c e non c++.
Io uso il c++ .( anzi diciamo che quando mi serve un programmino
imparo solo quello che mi è utile ... quindi saro molto impreciso nei
miei aiuti....)
Comunque credo che tu debba togliere const .
Se ancora non va prova anche a togliere int prima della funzione ..
non vorrei che l'accettasse solo come 'sottinteso' il tuo compilatore.
const serve a far si che gli array non vengano modificati dalla
funzione per sbaglio. Ma se sei sicuro del codice (che poi è
semplicissimo) pui togliere const.
Io ho sempre passata gli array per puntatore. *a indica come saprai
l'indirizzo di a[0] ... ovvero &a[0] .
Sei sicuro che la dichiarazione degli argomenti sia indicata cosi sui
manuali ?
La sintassi a[] che io ricordi non è consentita in c++ , almeno mi
ricordo che dovevo specificare la dimensione .(nel caso di array a +
dimensioni è diverso invece.. ma questo non c'entra).
Se proprio vuoi mettere a[..] metti a[10] come l'hai dimensionati tu.
Ma non fa il passaggio per copia in questo caso ?
Comunque con *a vai sicuro con quello che devi fare tu .
Per la questione della condizione del for , hai ragione va bene come
avevi fatto . Ma dato che time cresce mi veniva + spontaneo mettere <
... questione di gusti.
Ultima cosa ... perchè vuoi sottrarre ?
Se devi confrontare non sarebbe + immediato usare  ==  ?
Non che sia sbagliato , ma tu poi non sfrutti l'eventuale distanza fra
i caratteri che fai calcolare al programma. Comunque i char altro non
sono che degli unsignet int a 8 bit ... quindi puoi evitare la
conversione.
Ciao!

Ciao!
/*Ciao e grazie mille cmq vada*/
/*però forse è meglio se cambio compilatore*/
/*peccato il Miracle C è il piu semplice che abbia trovato*/
/*Samuele*/