Newsgroup: it.comp.lang.c
Titolo: Lib standard: esiste funzione che rimossi 2 elementi di un array arretra tutti i successivi di 2 posti?

Ciao a tutti, avendo un array di stringhe con i comandi da eseguire da 
linea di comando (sotto unix) vorrei, in caso di redirezione dell'input 
( < ), eliminare le due stringhe che redirigono ovvero "<" e "nome_file" 
e colmare questo vuoto anticipando tutte le successive stringhe di 2 posti.
Es:
situazione prima dell'uso della funzione che cerco:
mio array[]= stringa1, stringa2, <, nome_file, stringaA, stringaB
situazione dopo l'uso della funzione:
mio array[]= stringa1, stringa2, stringaA, stringaB
Esiste una simile funzione nella libreria standard del C?
	ciao e grazie, rz
-- 
         /TYDIRIUM - Ferrara - ITALY\
         \ICQ#    13901251   !!bye!!/
° ° Ranking FIBS: 1332.49 ° °

     ciao e grazie, rz
No.
Ma lo puoi fare tu: e' una riga, massimo due, di codice...
ciao,
g.


mi correggo.
Volendo, se l'array di stringhe e' un array di
puntatori a stringa, si puo' usare il comando di string.h
memmove (q.v.) per ricopiare in avanti i puntatori.
Naturalmente se prima non si deallocano le stringhe eliminate si
ha un memory leak.
Se le stringhe sono allocate staticamente, tipo
char S[100][50];
questo ovviamente non si puo' fare e vanno copiate.
ciao.
g.


	ciao e grazie, rz
-- 
http://mrzac.altervista.org


	ciao e grazie, rz.

 Perchè dici di copiare in avanti i puntatori? 
probabilmente perche' mi sono spiegato male.
Nella mia testa con "in avanti" volevo dire verso la testa
del vettore, verso l'elemento 0. Capisco che invece
per "in avanti" si intenda verso la fine del vettore.Scusa per
il fraintendimento.
ciao,
g.

 
		ciao e grazie, rz
-- 
http://mrzac.altervista.org

 Dite che è possibile usare memmove() per copiare variabili di tipo char* ?
NAME
        memmove - copy memory area
SYNOPSIS
        #include <string.h>
        void *memmove(void *dest, const void *src, size_t n);
DESCRIPTION
        The memmove() function copies n bytes from memory area src
        to memory area dest.  The memory areas may overlap.
Non ci sono riferimenti a caratteri.
Serve per spostare memoria (che puoi vedere spezzata in caratteri
o in byte, visto che 1 carattere occupa 1 byte). Puoi ovviamente
spostare quello che ti pare, purche' tu calcoli correttamente
quanti bytes devi spostare, moltiplicando la dimensione del dato
per l'occupazione:
se devi spostare N puntatori dovrai spostare N*sizeof(char *).
ciao
g.

 ciao


 }
Supponendo che tu l'esempio l'abbia copiato correttamente,
allora butta via il libro !
E' un esempio sbagliato.
Se assumi che la tua stringa str di 80 byte (79 caratteri + terminatore)
sia memorizzata (staticamente) nei bytes di indirizzo
da 10000 a 10079 compresi, allora
str di fatto puntera' all'indirizzo 10000 e p all'indirizzo 10010.
Se si copiano 80 byte dall'indirizzo 10010 all'indirizzo 10000
si va a leggere dagli indirizzi 10010-10089 quindi si esce dallo
spazio predisposto per str[] di 10 bytes.
Nei 10 bytes che seguono gli 80 predisposti per str[] ci
puo' essere la qualunque. Anzi, puo' essere una zona
di memoria nella quale non siamo autorizzati a leggere.
In tal caso potremo ottenere anche un crash.
Se non otteniamo un crash il programma funziona,
perche' copiamo anche il terminatore della stringa e quindi
a meno di errori di accesso, la stampa sara' corretta.
In ogni caso, anche se funziona, il programma e'
concettualmente errato.
ciao,
g.

 
	ciao, rz
-- 
http://mrzac.altervista.org