Newsgroup: it.comp.lang.c
Titolo: Funzioni e stringhe

Salve a tutti.
Qualcuno sa dirmi come si fa per scrivere in una stringa passata ad una
funzione?
Mi spiego meglio con un esempio:
void function1(char *var1[])
{
*var1[0]='a';
*var1[1]='b';
*var1[2]='c';
}
Questo codice dovrebbe scrivere sulla stringa che viene passata alla
funzione, ma scrive soltanto il primo valore.
Ho ovviato al problema scrivendo in una variabile temporanea e copiando
successivamente la stringa con strcpy (strcpy(*var1,tmpvar), ma cosi' perdo
un sacco di velocita'.
Qualcuno potrebbe spiegarmi come si fa?
Grazie a tutti.
Ciao.

 }
Assegni il valore al carattere puntato da ciascun elemento del vettore. 
Non ho capito cosa vorresti fare.

 void function1(char *var1[])
con
void function1(char *var1)
perche' nel primo caso passi alla funzione un array di puntatori.
All'interno della funzione io farei cosi':
*var1='a';
*(var1 +1)='b';
*(var1 +2)='c';
Credo che funzioni.
Saluti

Non ho capito cosa vorresti fare.
Mi spiego meglio.
Io passo un vettore di caretteri alla funzione. E questa deve modificare i
singoli caratteri uno ad uno.
Quindi, se io passo questa matrice:
var1[0]=1;
var1[1]=2;
ecc...
la funzione deve scriverci:
var1[0]++;
var1[1]++;
ecc...
e ottenere come risultato:
var1[0]=2;
var1[1]=3;
ecc...
In poche parole ho bisogno di poter modificare ogni singolo elemento.
Grazie per le risposte.
PS: Le addizioni non c'entrano niente, le ho messe solo per chiarire il
concetto.

 
void function1(char *var1)
{
  var1[0]='a';
  var2[1]='b';
  var3[2]='c';
}
....
char buffer[10];
function1(buffer);

}
La tua funzione prevede che le sia passato un array di puntatori a
carattere (gli operatori [] hanno la precedenza su * ) e non un
puntatore a carattere.

 singoli caratteri uno ad uno.
Allora, char *var1[] non è un vettore di caratteri.
void function1(char *var1)
{
/* ammesso che tu sia SICURO che
var1 punti ad blocco di memoria valido
e modificabile */
var1[0]='a';
var1[1]='b';
var1[2]='c';
}

 *(var1 +2)='c';
O anche
var1[0]='a';
var1[1]='b';
var1[2]='c';
EMG

In poche parole ho bisogno di poter modificare ogni singolo elemento.
Il C non possiede il passaggio per riferimento come altri linguaggi,
ma solo per valore.
Il passaggio per riferimento viene normalmente simulato adoperando i
puntatori.
In pascal, per esempio, per modificare un array all'interno di una
funzione bisogna passarlo per riferimento e non per valore.
Scrivere cioe' 
procedure modify_array(a : array-of-char) ;
e 
procedure modify_array(var a : array_of_char) ;
sono due cose diverse.
Nel primo caso non si riesce a modificare i valori contenuti
nell'array, mentre nel secondo si.
In C, invece, la funzione si puo' scrivere in due modi ma rispettando
un solo principio :
void modify_array( char a[] ) ;
void modify_array( char * a ) ;
In entrambi i casi alla funzione viene passato per copia un indirizzo
al primo elemento dell'array e tramite gli operatori [] o * se ne
ottiene il valore puntato.
Ti sto dicendo questo perche' credo di aver capito in cosa ti
confondi.
La scrittura 
*var1[0] = 'a' 
Non e' equivalente a (*var1)[0] = 'a' come invece avviene in pascal e
che peraltro in C e' ridondante.
Perche' char *var1[] non e' un puntatore a un vettore di caratteri, ma
un vettore di puntatori a carattere.
Ok ! la smetto con questo enorme (e magari inutile) polpettone ! ;)