mii-community/UsenetArchiveIT-conversations huggingface dataset:
Newsgroup: it.comp.lang.c
Titolo: Tasti direzionali

Salve a tutti.
Ho trovato in rete un videogioco scritto in C, in cui per effettuare i
movimenti si usano tasti diversi da quelli direzionali.
Il programmatore definisce una variabile
char cc;
poi da' un'istruzione scanf (......)
infine è definito un ciclo
switch( cc ) {
.......
}
con le diverse operazioni.
Io voglio modificare il programma introducendo i tasti direzionali e
vorrei quindi chiedervi quale carattere venga inviato premendoli.  
Vi ringrazio in anticipo per l'aiuto.
Saluti
Gianpaolo
NB: l'indirizzo email e' scritto in ROT 13!
Homepage: 
http://www.gianpaolo.cjb.net
ICQ UIN: 49039270

vorrei quindi chiedervi quale carattere venga inviato premendoli.  
Dipende dal sistema.
Devi usare, presumibilmente, una funzione messa a disposizione del tuo
compilatore, che compilatore usi ?
--
Andrea Laforgia (ICQ 87230455)
http://www.geocities.com/AndreaLaforgia
"ci sono tre tipi di persone nel mondo : quelli che
 sono bravi in matematica e quelli che non lo sono."

compilatore, che compilatore usi ?
CygWin.


 infine č definito un ciclo


ch2=readkey; <--- qui trovi il codice del tasto
In che libreria si trova questa funzione?



Scusami ma mi sono confuso con il pascal cmq puoi utilizzare questa funzione
se compili per dos
int ReadKey(Upper : Byte)
int  i ;
{
  asm {
                        xor  ah, ah     // Funzione  leggitasto
                        int  16h        // Interrupt gestione tastiera
                        test al, al     // se al = 0 tasto speciale
                        jz   @Speciale
                        jmp  @Char
     @Speciale     :    xchg al, ah     // tasto speciale = CodiceTasto +
256
                        inc  ah
                        jmp  @Exit
             @Char :    xor  ah, ah     // Azzera il valore di ah
                        cmp  Upper,0
                        jz   @Exit
                        cmp  al, 96     // Controlla se il tasto battuto
                        jb   @Exit      // un carattere minuscolo
                        cmp  al, 122    //        96 < al < 122
                        ja   @Exit
                        sub  al, 32     // UpCase del carattere premuto
             @Exit :    mov  i, ax
  }
  return (i);
}
Fammi sapere ciao Re Di Cuori

  asm {
   ^^^^^
Il compilatore mi segnala un errore qui. Sei sicuro?
Sai dirmi dove si possano trovare altri esempi di codice assembler in
un programma C?
ciao, | "Far segnare un compagno e' la soddisfazione piu' bella" (W. Gretzky)
Gianpaolo | Email: gianpaolo (at) 
gmx.net
 | Homepage: 
http://www.gianpaolo.cjb.net
Newsgroup: it.comp.lang.c
Titolo: [OT] - stampa su carta

 diversi post precedenti.
Diversi post precedenti di questo ng parlano di consigli pratici di
come stampare su carta, ed è per questo che mi sono permesso di
postare qui.
Alla fine valeva la pena fare tante polemiche? Se non ti andava di
rispondermi non era meglio ignorare il post? Avremmo risparmiato 1
minuto del nostro prezioso tempo. :)
Un saluto a tutto il ng,
Michele

 minuto del nostro prezioso tempo. :)
IMHO ha fatto bene. Sai... se tutti postassero qui quello che vogliono
(solo perche` e` fatto in C) sarebbe un macello.
Ci sono NG dove gli [OT] segnalati sono tollerati. Altri dove lo sono meno.
Qui non lo sono tantissimo, specie se serve per fare passare una domanda
tecnica che non centra nulla con il manifesto.
-- 
[ RiK0                                ]
[ non credo negli schemi non vincenti ]
[ two is an odd prime number          ]

 if ((stdprn = fopen("LPT1:", "r+")) != NULL)
Suppongo che dovrai aprire il file come "w", non come "r+": sulla
stampante ci devi scrivere, mica leggere.
Ovviamente, il nome del file in sé è dipendente dal sistema, ma basta che
il programa vada a prendere quest'informazione dall'esterno (es., da un
file di configurazione, o dalla linea di comando).
E su Linux o altri Unix, quale sarebbe il nome del file da aprire? È
possibile che sia, per esempio, "/dev/lp0"?
--
Cingar
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 possibile che sia, per esempio, "/dev/lp0"?
In teoria si... in pratica non mi pare che un utente comune possa
scriverci. IMHO bisogna essere root per farlo.
Ad ogni modo personalmente ritengo che anche se la tua soluzione
probabilmente funziona (al momento sono sotto win -- e poi la mia stampante
ha fuso giusto oggi una bustina di plastica sul rullo... grrr.... -- ),
cosi` come funzionerebbe un system con il comando di stampa (questo su
GNU/Linux va di certo).
Tuttavia, anche se non riguarda questo NG, ritengo complessivamente che
possa valere la pena di guardarsi come si fa la cosa secondo le convenzioni
e i meccanismi del proprio sistema operativo. Il tutto IMHO, chiaramente.


 tecnica che non centra nulla con il manifesto.
Se tu avessi rivisto i vecchi post sull'argomento ti saresti accorto
che quasi tutti hanno avuto una risposta concreta. Ricorda che google
è tuo amico.
P.S.: Colgo l'occasione di questo inutile "flame" per augurare a te e
a tutto il ng un felice anno nuovo. Il tutto ovviamente senza rancore.
Michele

 possibile che sia, per esempio, "/dev/lp0"?
In ambiente UNIX esistono altri nomi ma /dev/lp[0-2] e` il piu` comune.
Ed in genere e` solo scrivibile ed utilizzabile solo da root oppure 
dallo user "lp".  Un programma di user non puo` funzionare.

Newsgroup: it.comp.lang.c
Titolo: DLL, problemi!!!

Vorrei esportare una funzione in una DLL, ma quando la chiamo (da VB
ad esempio) mi ritorna sempre il valore  -4646.
Why?
int __stdcall  __declspec(dllexport) somma(int a, int b)
{
	int sum;
	sum=a+b;
return sum;
}
THANKS.
               --Please also reply via E-Mail--
                      4169522043485253

 wrote in message
37cae920...@news.interbusiness.it...

Newsgroup: it.comp.lang.c
Titolo: Libreria Libnet

Salve a tutti,
vi volevo chiedere se magari mi potevate aiutare a trovare della
documentazione per quanto riguarda la  libreria libnet!
Vi ringrazio anticipatamente !

 documentazione per quanto riguarda la  libreria libnet!
Quella contenuta nello zip non ti basta? (che poi è questa:
http://libnet.sourceforge.net/libnet.html
)
--- bye

Newsgroup: it.comp.lang.c
Titolo: Perchè non va??

Ciao a tutti.....
Ho fatto questo semplice programma sulle liste, che elimina
un'occorrenza di una val
da questa, e la stampa a video, ma mi va in segmentation fault, e non
capisco perchè....
il problema credo sia nella funzione di stampa della lista,perchè se
isolo quella parte, non va in seg.fault...
#include<stdio.h>
#include<stdlib.h>
typedef struct lista {
	int value;
	struct lista* next;
	} lista;
typedef lista* listaptr;
void stampalista(listaptr L1){
 if(L1!=NULL)
	{
	printf("%d ",L1->value);
	if(L1->next !=NULL){
		stampalista(L1->next);}
	else{printf("\n");
}
}}
listaptr insert(listaptr h, int v){
	listaptr x=(listaptr)malloc(sizeof(lista));
	x->value = v;
	x->next= NULL;
	if(h != NULL) {
		x->next =h;
		}
	return x;
}
void eliminaprimo(listaptr* l, int k){
	listaptr temp;
	if (*l == NULL) return;
	if ((*l)->value != k){
		eliminaprimo(&((*l)->next), k);
		return;
		}
	temp=*l;
	*l=(*l)->next;
	free(temp);
	return;
}
main(){
listaptr L;
int i,c,j,m;
scanf("%d", &i);
for(j=0;j<i;j++){
	scanf("%d", &c);
	L=insert(L, c);
	}
scanf("%d", &m);
eliminaprimo(&L, m);
stampalista(L);
return 0;
}
Aiutatemi please!!!


L non e' inizializzata.
Non puoi assumere nessun valore (nemmeno NULL, cioe' 0), per puntatori
non inizializzati.
Quando passi L ad insert() la prima volta, nel tuo test
if(h != NULL) {
    x->next =h;
}
h (cioe' L) potrebbe avere un valore diverso da zero, ma non puntare a
nulla.
Quando tu poi stampi la lista, accedi ad una regione di memoria che
non ti appartiene.
Prova a inizializzare L a 0 e vedrai che funziona.
P.S.
Mi sono attenuto a risolvere il problema del Segmentation fault, non
ho quindi commentato sulla qualita' del codice che richiede molto piu'
tempo ma sono piu' che disponibile a fare, se richisto.
Newsgroup: it.comp.lang.c
Titolo: esercizio chiamata di f con struct

Salve a tutti,
compilando questo prog riguardo alle chiamate di funzioni con l'uso delle
strutture, mi dą molti errori di compilazione, dicendomi che non ho
dichiarato le var "i, anni, min, max, cont" usate nella funzione
conta_persone. Solo che secondo me le var sono correttamente dichiarate.
Come mai?
Di seguito il codice:
#include <stdio.h>
#define SIZE 5
int conta_persone (Persone [], int, int, int);
int main()
{
struct persone
{
char *nome;
char *cognome;
int anno;
};
typedef struct persone Persone;
Persone vett[SIZE];
int minimo = 20, massimo = 70, num_persone = 0;
vett[0].anno = 1930;
vett[1].anno = 1970;
vett[2].anno = 1980;
vett[3].anno = 1990;
vett[4].anno = 2000;
num_persone = conta_persone(vett, SIZE, minimo, massimo);
printf ("Le persone di eta\' compresa tra i %d ed i %d anni sono: %d",
minimo, massimo, num_persone);
int conta_persone (Persone vett[], int s, int min, int max)  /* la funzione
che mi dą il problema */
{
int i, anni, cont = 0;
for (i = 0; i <= 4; i++)
   anni = 2004 - vett[i].anno;
      if (anni >= min && anni <= max)
      cont++;
return cont;
}
return 0;
}
Grazie
Daniele

C'è una confusione pazzesca in questo codice!
Non dovresti definire la struttura nel main() e inoltre hai scritto il
prototipo con un parametro Persone prima della definizione della struttura
stessa.
Ma la cosa più tragica è che hai definito una funzione all'interno di
un'altra funzione!!! Non si può fare una cosa del genere. Inoltre dovresti
imparare a indentare il codice.
Dovresti scriverla più o meno così (errori algoritmici non li ho
controllati):
#include <stdio.h>
#define SIZE 5
struct persone {
   char *nome;
   char *cognome;
   int anno;
};
typedef struct persone Persone;
int conta_persone (Persone [], int, int, int);
int main()
{
   Persone vett[SIZE];
   int minimo = 20, massimo = 70, num_persone = 0;
   vett[0].anno = 1930;
   vett[1].anno = 1970;
   vett[2].anno = 1980;
   vett[3].anno = 1990;
   vett[4].anno = 2000;
   num_persone = conta_persone(vett, SIZE, minimo, massimo);
   printf ("Le persone di eta\' compresa tra i %d ed i %d anni sono: %d",
minimo, massimo, num_persone);
   return 0;
}
int conta_persone (Persone vett[], int s, int min, int max)
{
   int i, anni, cont = 0;
   for (i = 0; i <= 4; i++)
      anni = 2004 - vett[i].anno;
 
   if (anni >= min && anni <= max)
      cont++;
   return cont;
}
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

 un'altra funzione!!! Non si puň fare una cosa del genere.
Quě in effetti ho fatto proprio una cappellata. Quel return 0 alla fine
m'era proprio sfuggito. Cmq ora funziona.
Grazie
Daniele
Newsgroup: it.comp.lang.c
Titolo: LIBRI!

Ciao all,
mi servirebbero alcuni suggerimenti riguardo alcuni testi da consultare.
In particolare mi servirebbe una guida ben fatta al C++ (so gia' programmare in C...),
un libro tratti di programmazione sotto Windows, e un libro di algoritmi in C/C++.
Ringrazio  
-- 
:wq
Saluti.
*NATHAN*

...


un libro tratti di programmazione sotto Windows, e un libro di algoritmi in C/C++.
Guida al C++: Lippman e Lajoie, "C++ Primer 3rd Edition", Addison Wesley
(al momento solo in inglese; la versione italiana e` quella della 2nd Edition,
MOLTO vecchia e superata).
Programmazione sotto windows: Petzold e Yao, versione originale della
Microsoft Press, mi pare che l'ed. italiana sia Jackson (se no, sara`, penso,
Mondadori), titolo chi-se-lo-ricorda (comunque di Petzold e Yao c'e` solo
quello).  Per cose piu` avanzate, molto consigliato il Richter (anche li` il
titolo e` poco significativo, tipo "programmazione avanzata per windows";
originale Microsoft Press, italiano Mondadori).
Algoritmi: Sedgewick, "Algorithms in C" o "Algorithms in C++" a seconda
di quello che esattamente desideri (le impostazioni ovviamente differiscono).
Sorry, non ricordo l'editore e non so se ci sia una versione italiana.
Alex

 Sorry, non ricordo l'editore e non so se ci sia una versione italiana.
Addison-Wesley; no, per il secondo punto.
Personalmente non mi piace molto il Sedgewick; prova a dare
un'occhiata agli altri sacri testi.  Uno buono e' Cormen, Leiserson,
Rivest - Introduction to algorithms - McGraw-Hill.  Se devi usare il
C++ guarda anche se ti piace il Budd - Classic data structures in C++
(Addison-Wesley, pre-ANSI Standard).  E nella stanza di un
programmatore non puo' mancare il Knuth, The art of computer
programming, Addison-Wesley.
-- 
Maurizio Loreti                      
http://wwwcdf.pd.infn.it/~loreti/mlo.html
Un. of Padova, Dept. of Physics - Padova, Italy          
lor...@padova.infn.it

Newsgroup: it.comp.lang.c
Titolo: Accesso alle locazioni di memoria

Ciao a tutti.
In ambiente DOS e Win16 per accedere alle locazioni di memoria bassa si
usano le funzioni outportb() e inportb().
Come si può fare in ambiente Win32 ?
(Non importa in quale linguaggio, va bene sia VB che C che C++)
Grazie.
Mao.

Come si può fare in ambiente Win32 ?
Ci saranno le api specifiche allo scopo ma non so se esiste qualcosa
in C .

in C .
Rettifico .
Per le locazioni di memoria in windows ed in C non dovrebbe esistere
niente mentre invece per scrivere sulle porte suppongo qualcosa debba
esistere ......
Newsgroup: it.comp.lang.c
Titolo: Data e Ora

Ciao a tutti,
Ho la necessità di sapere la data e l'ora di un file( sia quella di
creazione che quella di modifica).
Non riesco a trovare la libreria giusta.
La piattaforma che utilizzo è Linux e Unix   ( deve funzionare in entrambi).
Grazie 1000

EtnaFra wrote:

	$ man 2 stat
	$ man localtime
-- 
Veri pirati noi siamo       Ma cosa c'e` di male?
Contro il sistema lottiamo  Ma cosa c'e` di strano?
Ci esercitiamo a scuola     Facciamo un gran casino
A far la faccia dura        Ma in fondo lavoriamo
Per fare piu` paura         Per capitan Uncino

 La piattaforma che utilizzo è Linux e Unix   ( deve funzionare in entrambi).


 La piattaforma che utilizzo č Linux e Unix   ( deve funzionare in


Grazie 1000!
Funziona!
"Capitan Uncino" <c.uncino@l'isolachenonc'e`.org> ha scritto nel messaggio
news:9ugeq3$pig$1...@news.flashnet.it...

Newsgroup: it.comp.lang.c
Titolo: Complessita' del quicksort iterativo

Dunque, la mia lotta con il quicksort non e' ancora finita :(
Quella in fondo e' la versione iterativa del quicksort che ho trovato. 
La mia domanda e': il quicksort ricorsivo si basa sul principio del 
divide et impera, usa in genere come elemento di confronto l'elemento 
mediano dell'array da ordinare (e non lo cambia mai) e ha complessita' O
(nlogn). Questo quicksort usa invece come elemento di confronto il 
limite sinistro dell'array (e degli eventuali "subarray") da ordinare: 
questo implica una complessita' maggiore? Non e' meno efficiente della 
varsione ricorsiva non sfruttando il divide et impera?
Grazie mille a tutti :)
void it_quicksort(int a[], int n)
{
	int k, h, sx, dx,	pivot;
	stack_t *stack;		
 
	init(&stack);	/* Inizializza lo stack */
	push(0, n - 1, &stack);	
	while (stack != NULL)						
	{
		pop(&sx, &dx, &stack);	
		k = sx;									
		h = dx + 1;
		pivot = a[sx];
		while (k < h)							
		{
			do h--;
			while(a[h] > pivot);		
 
			do k++;
			while(a[k] <= pivot && k != h);
			if (k < h)
				swap(k, h, a);
		}
		if (sx != h)
			swap(sx, h, a);
 
		if (sx < h - 1)
			push(sx, h - 1, &stack);
 
		if (dx > k)
			push(k, dx, &stack);
	}
}
-- 
Monica -- IAFa Telecom #187
UIN #55084330
File reality.sys corrupted, Reboot Universe? Y/N

 varsione ricorsiva non sfruttando il divide et impera?
Dipende da come viene effettuata la selezione del pivot nell'algoritmo 
Divide et Impera (e nell'algoritmo `non ricorsivo'). Se la scelta e` la 
stessa, l'efficienza e` ovviamente identica. Il motivo e` che, 
indipendentemente dal fatto che l'algoritmo sia ricorsivo o meno, sempre 
uno stack si usa. Stessa struttura dati, stessa efficienza (in questo caso).
Scegliendo come pivot ad esempio il primo (o ultimo) elemento del 
sottoarray, nel caso peggiore hai T(n) = O(n^2), mentre nel caso medio 
T(n) = O(nlgn). Anche scegliendo l'elemento mediano, nel caso peggiore 
T(n) = O(n^2), ad esempio se hai un array in cui tutti i valori sono 
uguali. Questo a meno che tu non inserisca un meccanismo di verifica per 
questo caso (ovvero, se gli elementi sono tutti uguali, l'array e` gia` 
ordinato e la funzione non fa piu` niente).
PS: anche se l'argomento (leggendo il manifesto - correggetemi se 
sbaglio) e` in-topic, ti consiglio di spostarti su it.comp.programmare o 
it.scienza.informatica, dato che la tua domanda ha poco a che fare con 
il C, e molto a che fare con una discussione sugli algoritmi 
indipendente dal linguaggio.
-- 
Enrico `Trippo' Porreca

 indipendente dal linguaggio.
Grazie mille per la risposta, sei stato chiarissimo tanto che non credo 
che dovro' postare in altri gruppi :D 
-- 
Monica -- IAFa Telecom #187
UIN #55084330
Se la vita ti sorride ha una paresi. 
			(D'Alcatraz)
Newsgroup: it.comp.lang.c
Titolo: fstat

ciao a tutti
voglio stampare gli attributi di un file passato la linea di comando.
non capisco dove sia l'errore:
************************************************************************
#include <errno.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdio.h>
#include <time.h>
#include <pwd.h>
#include <stdlib.h>
int main (int argc, char* argv[]){
	if(argc == 0){
		return 0;
	}
	int fd, lun;
	char buf[1024];
	struct stat info;
	const char* nome = argv[1];
	if( (fd = open(nome, O_RDONLY)) == -1){
		perror("Errore nella open()");
		exit(errno);
	}
	errno = 0;
	if ( fstat(fd,&info)== -1){
		perror("Errore nella open()");
		exit(errno);
	}
	else{
		printf("I-node: %ld\n", (long)info.st_ino);
		printf("Tipo: ");
		if (S_ISREG(info.st_mode)) printf("regular");
		else if (S_ISDIR(info.st_mode)) printf("directory");
		else if (S_ISLNK(info.st_mode)) printf("link simbolico");
		else if (S_ISCHR(info.st_mode)) printf("character special file");
		else if (S_ISBLK(info.st_mode)) printf("block special file");
		else if (S_ISFIFO(info.st_mode)) printf("pipe");
		else if (S_ISSOCK(info.st_mode)) printf("socket");
		else printf("non riconosciuto");
		printf("Diritti: ");
		if (S_IRUSR & info.st_mode) putchar('r');
		else putchar('-');
		if (S_IWUSR & info.st_mode) putchar('w');
		else putchar('-');
		if (S_IXUSR & info.st_mode) putchar('x');
		else putchar('-');
		if (S_IRGRP & info.st_mode) putchar('r');
		else putchar('-');
		if (S_IWGRP & info.st_mode) putchar('w');
		else putchar('-');
		if (S_IXGRP & info.st_mode) putchar('x');
		else putchar('-');
		if (S_IROTH & info.st_mode) putchar('r');
		else putchar('-');
		if (S_IWOTH & info.st_mode) putchar('w');
		else putchar('-');
		if (S_IXOTH & info.st_mode) putchar('x');
		else putchar('-');
		struct passwd *user = getpwuid(&info.st_uid);
		printf("UID: %s", user->pw_name);
//		struct group *gruppo = getgrgid(&info.st_gid);
//		printf("GID: %s", gruppo->gr_name);
		printf("ultima modifica: %s",ctime(&info.st_mtime));
	}
	if(close(fd) == -1){
		perror("Errore in chiusura");
		exit(errno);
	}
	return 0;
}
************************************************************************
scusate il post del codice...........
thanks

 }
Ciao
Giovanni
-- 
   A computer is like an air conditioner,
   it stops working when you open Windows.
   Registered Linux user #337974  < 
http://giovanni.homelinux.net/
 >

grazie mille..... :D
PS: mancava anche #include <grp.h> ;-)
Newsgroup: it.comp.lang.c
Titolo: heap

Ho una struttura cosě:
typedef struct e{
    char es[L];
    int v;
    }esame;
typedef  esame elEs[N];
struct x{
    int m;
    char n[L];
    char c[L];
    int ne;
    elEs es;
    float d;
};
con L e N costanti e devo ordinare il file con un heap facendo il confronto
solo sul campo d, ma passandogli un vettore contenente i campi m, n, c e d.
Perň le funzioni di gestione dell'heap dovrebbero essere utilizzabili con
qualsiasi tipo di dato.
Se qualcuno potesse darmi qualche dritta su come farlo o dove posso trovare
qsa che me lo spieghi gliene sarei grata.
Grazie.
Chiara

 ha scritto nel messaggio
news:AorC8.21785$CN3.6...@news2.tin.it...


Newsgroup: it.comp.lang.c
Titolo: Aiuto lista concatenata

Salve,
qualcuno sa spiegarmi il perchè questa funzione che deve aggiungere nodi
in una lista concatenata lo fa correttamente ma quando vado a stamparne
il contenuto tutti i nodi hanno gli stessi dati!!!Ci sto impazzendo..
 struct userList *insert(struct userList *list,char *usr,char *pass){
  if(list==NULL){
     list=malloc(sizeof(struct userList));
     list->user=usr;
     list->pass=pass;
     list->next=NULL;
     return list;
   }
   struct userList *testa=list;
   struct userList *previous=NULL;
   while(list!=NULL){
     previous=list;
     list=list->next;
   }
   struct userList *tmp=malloc(sizeof(struct userList));
   tmp->user=usr;
   tmp->pass=pass;
   tmp->next=NULL;
   previous->next=tmp;
   return testa;
}
In pratica se inserisco n nodi lei ne salva correttamente n e
concatenati correttamente.Ma tutti hanno gli stesso valori mentre nel
main io gli passo valori differenti!! 
Dove sbaglio??
Grazie in anticipo

     }
Sembra che in struct userList tu abbia soltanto un puntatore a char che 
assegni al parametro usr (allo stesso modo per pass). Quindi non stai 
allocando nuovo "spazio dati" per ogni elemento nuovo che stai 
aggiungendo alla lista.
Cosa fai nel main? Se anche lì non allochi spazio nuovo per ogni dato da 
inserire in lista, ma riutilizzi sempre lo stesso buffer (magari 
allocato dinamicamente una volta sola o allocato staticamente), è chiaro 
che tutti gli elementi della lista punteranno alla stessa zona di 
memoria dove ci sarà scritto un unico valore, l'ultimo.


Grazie per la risposta.
In effetti ho risolto dichiarando nella struttira non più 2 puntatori a
char ma 2 vettori di char di dimensione fissata.
Un saluto

Newsgroup: it.comp.lang.c
Titolo: puntatore a puntatore a puntatore a puntatore...

una domanda puramente teorica... 
c'è un limite massimo.. (ovvero 2) oppure si può continuare all'inifito..?

 c'è un limite massimo.. (ovvero 2) oppure si può continuare all'inifito..?
2? C'e' qualche folle su questo NG che ne ha messi cinque in fila...
Che mi risulti il linguaggio di limiti superiori non ne impone. Il buon
senso e l'implementazione del compilatore si.
Se non sbaglio il limite minimo di indirezione garantito dal linguaggio
dovrebbe essere 12. 
C:\>iao Angelo
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG
Newsgroup: it.comp.lang.c
Titolo: CORSI GRATUITI DI JAVA/ORACLE

                                            4 G.L. SOFTWARE S.R.L.
                                                Viale Monza,196
                                                   20128 Milano
                                                 Tel.02/27080684
4 G.L. Software S.r.l. seleziona giovani con buone conoscenze d'informatica
per un corso gratuito di programmazione Java/Oracle mirato all'inserimento
nel mondo del lavoro.
Un nostro funzionario e' a disposizione per qualsiasi chiarimento in merito.
Il corso iniziera' il 05/02/2001 dalle ore 9:30 alle ore 17:30 da Lunedi' a
Venerdi' e terminera' il 05/04/2001.
Inviare C.V. dettagliato per mail all'indirizzo: 
4gl...@4gl.it
, si prega
di indicare rif: Java.

                                            4 G.L. SOFTWARE S.R.L.
                                                Viale Monza,196
                                                   20128 Milano
                                                 Tel.02/27080684
4 G.L. Software S.r.l. seleziona giovani con buone conoscenze d'informatica
per un corso gratuito di programmazione Java/Oracle mirato all'inserimento
nel mondo del lavoro.
Un nostro funzionario e' a disposizione per qualsiasi chiarimento in merito.
Il corso iniziera' il 12/02/2001 dalle ore 9:30 alle ore 17:30 da Lunedi' a
Venerdi' e terminera' il 12/04/2001.


Newsgroup: it.comp.lang.c
Titolo: funzione che ritorna IP

salve a tutti,
devo implementare una routine che mi restituisca l'indirizzo ip della
macchina in formato ascii compresi i punti se l'interfaccia di rete è su.
(es. 10.12.60.200).
qualcuno mi sa dire come fare su Linux?
Esistono delle chiamate di sistema?
Grazie per la risposta.
-- 
Posted from  [62.98.166.82] 
via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 Esistono delle chiamate di sistema?
struct ifreq ifr;
int sock;
u_long IP;
strncpy(ifr.ifr_name, "interfaccia che vuoi utilizzare", sizeof(ifr.ifr_name));
sock = socket(AF_INET, SOCK_DGRAM, 0);
ioctl(sock, SIOCGIFADDR, &ifr);
memcpy((char *)IP, ifr.ifr_addr.sa_data+2, 4);
return inet_ntoa(*(struct in_addr *)&IP);
queste solo le operazioni che farei io... per lo stile non so... rivolgiti ad altri ;)
bye

> qualcuno mi sa dire come fare su Linux?
Rivolgiti a it.comp.os.linux.development, qui dentro si preferisce di aspetti
legati allo standard del linguaggio C.
-- 
Posted from  [80.105.34.80] 


Newsgroup: it.comp.lang.c
Titolo: Da "C" a "VB"





Scusate il disturbo 


ho sentito dire che esistono dei traduttori da "C" 
a "VB" e vero o e' la solita leggenda metropolitana?


Grazie 


Daniela



- Un OTTIMO manuale di C
- Un OTTIMO manuale di VB
- Un sacco di pazienza e voglia di imparare
rhymes
rhy...@insieme.net
"La realtà delle cose si nasconde dietro 
la loro reale apparenza (Maestro Hiamuri)"






Ok 


Grazie
Newsgroup: it.comp.lang.c
Titolo: Esercizio sulle stringhe

Volevo sapere cosa c'è di sbagliato in questo esercizio perchè non
riesco a farmelo venire:
/* scrivere un programma che prenda in input una riga di testo ed un
   carattere da ricercare e, utilizzando la funzione strchr, determini
il numero
   di occorrenze del carattere nel testo */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char s[80];
printf("inserisci stringa: ");
scanf("%s",s);
char c;
printf("inserisci carattere da ricercare nella stringa: ");
scanf("%s",&c);
int i=0;
char *p=s;
while(*p != '\0'){
    if(strchr(s,c)!=NULL){
    i++;
    }
  *(p++);
  }
 
  printf("%d\n",i);
 
  system("PAUSE");	
  return 0;
}

 
Ciao.

 Ciao.
Ciao
-- 
Cybertoldo
Per rispondermi via email, sostituisci moc.liamg con 
gmail.com

 infinito: io lo controllerei.
...qui intendevo: 'p' va illimitatamente oltre la fine della stringa. 
Cmq, in pratica: "segmentation fault" su diversi sistemi.


Newsgroup: it.comp.lang.c
Titolo: Strano Problema Djgpp&stringhe

Sto scrivendo una bozza di sistema operativo e mi trovo a fare i conti
con lo scrivere una printf()...
Utilizzo il Djgpp...
Iniziando a ragionarci sopra sono partito da una semplice prints
(stampa una stringa) sfruttando una funzione outcharxy scritta in
assembly.
Ma tutto quello che ho scritto non ha funzionato (abbastanza normale)
Alla fine ho trovato l'errore ma non trovo la soluzione.
Funzione Errata:
void prints()
{
	char c;
	char str[]="AAA"; //e' qui l'errore
	int  i=0;
	for(c=str[i];c!=0;c=str[++i])
	{
		outcharxy(c,Cur_X++,Cur_Y,Cur_Color_Fg,Cur_Color_Bg);
	}
}
Invece di scrivere AAA non scrive niente.
Funzione Funzionante:
void prints()
{
	char c;
	char str[4];
	str[0]='A';
	str[1]='A';
	str[2]='A';
	str[3]='\0';
	int  i=0;
	for(c=str[i];c!=0;c=str[++i])
	{
		outcharxy(c,Cur_X++,Cur_Y,Cur_Color_Fg,Cur_Color_Bg);
	}
}
Scrive AAA.
In pratica se inizializzo una stringa tutta insieme con la prassi
"stringa" il compilatore pare sbagliare in qualcosa...
Sapete spiegarmi a cosa e' dovuto? e come risolverlo?
Purtroppo scrivendo un sistema dal principo non mi posso basare su
librerie gia' scritte.
TIA,
Dalamar

 Dalamar

}
Purtroppo il problema non sta qui, ma nel diverso metodo che usa il
compilatore per tradurre un'inizialiazzione del tipo 
str[]="XXXX";
rispetto ad una...
str[0]='X';
str[1]='X';
str[2]='X';
str[3]='X';
str[4]='\0';
Credo cmq che l'errore risieda in qualche registro che non ho settato
a dovere in fase di inizializzazione e che viene utilizzato solamente
nella prima istanza...
Dubito che sia un problema del gcc...
Domani passo la giornata sul disassemblatore e vediamo se trovo
l'inghippo.
Grazie cmq e scusate il disturbo.
Dalamar
Newsgroup: it.comp.lang.c
Titolo: SECONDO K&R....

Ciao a tutti. Nell'ambito della descrizione di atoi() viene scritto il seg.
codice (trovate tutto a pag.51):
int atoi(char[s])
{
    int i,n;
    n=0;
    for(i=0;s[i]>='0' && s[i]<='9';++i)
         n=10*n+s[i]-'0';
    return n;
}
Non riesco a capire cosa vuol dire la seguente frase:
"L' espressione s[i]-'0' fornisce il valore numerico del carattere
memorizzato in s[i], perchč i valori di '0','1',ecc..,formano una sequenza
contigua crescente. Potreste spiegarmi in "italiano" :) cosa vuol dire
questa frase? Grazie e scusate per il codice se vi sembra lungo.

 questa frase? Grazie e scusate per il codice se vi sembra lungo.
'0' in codice ASCII equivale a 48. Se togli '0'  (48)  a un carattere
numerico ottieni il corrisepttivo valore numerico.
In altre parole  :
'1' = 49
'2' = 50
..
'9' = 57
se togli la base '0' = 48 a questi carateri trovi appunto che
'1' - '0' = 49 - 48 = 1
'2' - '0' = 50 - 48 = 2
...
ecc..

ma era una cretinata! come ho fatto a non pensarci!!!
Grazie mille iGor


 questa frase? Grazie e scusate per il codice se vi sembra lungo.
semplice :-)
Prova a vedere i codici asci dei caratteri '0', '1' .... vedrai che sono
crescenti
0 ad esempio vale 48, 1 49 e così via.
Se tu fai '1' - '0' cosa fai? 49 - 48 = 1 il valore del carattere '1'
Idem per gli altri.
-- 
Non c'è più forza nella normalità, c'è solo monotonia.
-----= Posted via Newsfeeds.Com, Uncensored Usenet News =-----
http://www.newsfeeds.com
 - The #1 Newsgroup Service in the World!
-----==  Over 90,000 Newsgroups - 16 Different Servers! =-----

contigua crescente. 
I char, in C, vengono trattati alla stregua dei tipi interi.
Scrivere c - d con c e d char, significa compiere la
sottrazione dei loro codici interi.
Scrivere s[i] - '0' significa compiere la sottrazione dal
codice intero di s[i] del codice intero di '0'.
Qualsiasi sia la codifica (ASCII, EBCDIC, ...) della
macchina che tu stia considerando, i caratteri da '0' a '9'
saranno memorizzati in modo contiguo (es. in ASCII '0' ha il
codice 48, '1' il codice 49, e cosi' via).
Prendendo in considerazione il codice ASCII si ha quindi :
'0' - '0' = 48 - 48 = 0 
'1' - '0' = 49 - 48 = 1
'2' - '0' = 50 - 48 = 2
...
Questo fa si' che i caratteri da '0' a '9' vengano tradotti
rispettivamente nelle cifre intere corrispondenti.
--
CyberWalkie - walkietalkie(at)
libero.it


Tuttavia pare che la contiguità non sia garantita su tutte le piattaforme
(probabilmente su quelle diffuse si) per cui il codice non dovrebbe essere
portabile in questo senso.
Questo é il risultato di un thread di qualche tempo fa!!

Questo é il risultato di un thread di qualche tempo fa!!
Di questo devo scusarmi. Io stesso avevo letto su messaggi usenet
che non fosse garantita la contiguita' e ho quindi riferito
quanto avevo letto; per fortuna sembra invece che il fatto che
tutte le cifre siano caratteri positivi e contigui e' invece
richiesto dallo standard. Scrivere c-'0' e' quindi un modo
portabile di ottenere il valore numerico associato ad un
carattere c contenente una cifra su tutti i compilatori
conformi del linguaggio C.
Andrea
--
Andrea Griffini, Programmer
http://www.netservers.com/~agriff
Newsgroup: it.comp.lang.c
Titolo: AIUTO. LINUX

       Scusate tutti...
so che questo non č il posto giusto..
ma chi mi saprebbe dire che fine ha fatto il gruppo
it.comp.linux?
il mio server dei gruppi mi dice che non esiste, anche se nell'elenco
dei gruppi da sottoscrivere c'č.
Grazie a tutti...a buon rendere.
Ing. Cristiano Palazzo



Il gruppo č stato suddiviso nei seguenti 
   it.comp.os.linux.development
  it.comp.os.linux.iniziare
   it.comp.os.linux.sys	
Saluti
Robby

 Robby
--
Ing.Cristiano Palazzo
Colleferro V.Consolare Latina 52
0347.17.34.305

Newsgroup: it.comp.lang.c
Titolo: manuale c++

salve,
mi sapreste indicare un sito dove scaricare o consultare un manuale
di c++ in italiano?
grazie mille mille mille :)
--------------------------------
Inviato via 
http://usenet.iol.it



sei OT
--
Rhymes
--------------------------
rhy...@myself.com
http://www.foxhound-games.it
http://embyte.mascanc.net
--------------------------
Linux User #219707

Newsgroup: it.comp.lang.c
Titolo: buffer circolare

ciao a tutti.
chi mi sa spiegare come funziona e come utilizzare un buffer circolare??
grazie a tutti 
---->> ante75 <<----
-- 
Posted from 
ppp-62-10-121-78.dialup.tiscali.it
 [62.10.121.78] 
via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 ha scritto nel messaggio
news:26dd46bb03678009dac...@mygate.mailgate.org...

E' un array gestito in modo circolare
supponiamo di avere
int ary[10];
l'elemento successivo ad ary[0] e' ary[1]  l'elemento successivo ad ary[1]
e' ar[2] eccetera fino ad ary[8] ... l'elemento successivo ad ary[9] e'
ary[0]
si utilizza l'operazione modulo per gestirlo, ossia %
avendo la seguente istruzione:
fori(i=0;i<=10;i++) (ary[i%10])= i;
ottieni
nell'array ary
10 1 2 3 4 5 6 7 8 9
il primo elemento all'inizio vale 0 per i=0, quando i vale 10 si ottiene che
10%10=0 quindi
ary[0]=10;


Viene usato per ovviare agli inconvenienti che si hanno con i buffer normali
realizzati con un array: in queste strutture dati si utilizzano un indice di
inserimento e uno di estrazione, che però scorrono verso l'elemento di
indice 0 (supponendo che l'indice di inserimento sia < dell'indice di
estrazione) via via che si inseriscono e tolgono i dati; una volta che
l'indice di inserimento è arrivato a 0, non si possono effettuare altri
inserimenti senza aver prima riorganizzato il vettore, il che richiede una
certa complessità. Con il buffer circolare questo problema non si pone, in
quanto attraverso l'operazione di modulo sposti l'indice di immissione in
fondo al vettore, per cui puoi continuare ad immettere i dati senza
riorganizzare. Nota però che, mentre nel buffer normale le condizioni di
buffer pieno e vuoto sono distinte (buffer pieno := indice di immissione ==
0 && indice di estrazione == MAX; buffer vuoto := indice di immissione ==
indice di estrazione), nel caso di buffer circolare questo non è più vero,
in quanto i due indici sono uguali in entrambe le situazioni, per cui devi
necessariamente sprecare un elemento per fare in modo di avere indice di
inserimento == indice di estrazione + 1.
Spero di essere stato chiaro.
Ciao,
Cecco
Newsgroup: it.comp.lang.c
Titolo: Per iniziare...

Salve mi vorrei addentrare per la prima volta nel linguaggio C, ho 
acquistatop un libro di C++ ma credo di aver sbagliato. Probabilemten la 
miglior cosa è partire da C. Avreste mica qualche indizio da adrmi? mi 
servirebbe un compilatore (potete indicarmene uno buono?) e poi se lo 
conoscete un buon libro per autodidatta che parta da zero. Grazie mille a 
tutti!
Marco 

 miglior cosa è partire da C.
"Partire" per andare dove? Se vuoi imparare il C, prendi un libro sul C. Se 
vuoi imparare il C++, prendi un libro sul C++. Non prendere un libro sul C, 
se quello che alla fine vuoi adoperare è il C++.
Max

   #
#   
http://cikkox.altervista.org
    #
# GNU/Linux Registered User #365929 #
#    GnuPG/OpenPGP key available    #

ah... ok perfetto è questo che volevo sapere. Invece per quanto riguarda il 
compilatore, quale mi consigliate? E poi ho bisogno di altro per iniziare? 
Grazie ancora
Marco
cikko ha scritto:


 necessario conoscere il C.
diciamo che male nn fa ecco...

 diciamo che male nn fa ecco...
Se deve imparare il C++ e' meglio che inizi subito a capire il paradigma
della programmazione ad oggetti saltando completamente il C
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG
Newsgroup: it.comp.lang.c
Titolo: confronto di stringhe

Salve a tutti.
Continuo ad avere un problema nonostante abbia gia' letto centinaia di
messaggi,peraltro molto esaurienti.
Mi spiego semplificando il mio problema:ho 2 file contenenti
stringhe.testo1 e testo2.ogni stringa termina con return.
testo1 contiene
ABC
ABC
ACB
testo2
ABC
BCA
CBA
io devo confrontare la prima riga di testo1 con tutte le righe di
testo2 e contare quelle uguali(in questo caso 1)
poi passare alla seconda riga di testo1 e confrontarla con tutte le
righe di testo2,e ricontare( dinuovo1).Poi fare lo stesso con la 3a
riga di testo1 e confrontarla con testo2(questa volta 0).
Ho pensato ad array bidimensionali o all'uso di strcmp ma
probabilmente devo ancora entrare nel meccanismo perche' non ne ho
cavato molto.Spero che qualcuno possa anche solo mettermi sulla strada
giusta.Grazie comunque
Ciciuz
ciccio...@LEVAQUESTOhotmail.com

 ha scritto:

Inviato da 
www.mynewsgate.net

 }
Please, almeno compilare il codice prima di postare suggerimenti sbagliati.
Tutti i cast sul valore di ritorno di malloc sono superflui, ridondanti 
e possono nascondere errori (come la mancata #inclusione di <stdlib.h>, 
problema da cui questo programma e` affetto).
Verificare che le chiamate a malloc non restituiscano NULL.
Dato che il programma non compila neanche, non ho verificato se la 
logica sia corretta (a parte quel problema dei cicli).
-- 
Enrico `Trippo' Porreca

     while (fgets(auxString, sizeof auxString, stream1) != NULL) {
                                                                 ^
Mi sono dimenticato una parentesi chiusa.
-- 
Enrico `Trippo' Porreca

...

Ci sono 1000 modi per implementare l'algoritmo di cui hai bisogno,
alcuni MOLTO CERVELLOTICI (vedi sopra) altri piu' accessibili!!
Ti invio il mio MODESTO contributo:
/***************************************************/
#include <stdio.h>
#define maxline1 3
#define maxline2 3
FILE *fp_dati1;
FILE *fp_dati2;
char line1[maxline1][maxline2];
char line2[maxline1][maxline2];
int i,j,l,m,ii,jj,kk;
int ContaCaratteri=0;
int ContaRighe=0;
int main()
{
  fp_dati1=fopen("testo1.txt","r");
  fp_dati2=fopen("testo2.txt","r");
 
  for(i=0;i<=maxline1;i++)
    {
      for(j=0;j<=maxline2;j++)
	{
	  line1[i][j]=fgetc(fp_dati1);
	}
    }
  for(l=0;l<=maxline1;l++)
    {
      for(m=0;m<=maxline2;m++)
	{
	  line2[l][m]=fgetc(fp_dati2);
	}
    }
  for (ii=0;ii<maxline1;ii++)
    {
      for(kk=0;kk<maxline1;kk++)
	{
	  for(jj=0;jj<maxline2;jj++)
	    {
	      if(line1[ii][jj]==line2[kk][jj])
		{
		  ContaCaratteri++;
		}	        
	      if (ContaCaratteri==maxline2)
		{
		  ContaRighe++;		
		}	        
	      printf("ContaRighe=%d\n",ContaRighe);
	    }	        
	  ContaCaratteri=0;
	}
    }
 
  fclose(fp_dati1);
  fclose(fp_dati2);
 
}
/**************************************************/
Saluti
		Mork
Newsgroup: it.comp.lang.c
Titolo: IL C La Scopa e print dei caratteri ASCII

Salve newsgroup,
stavo realizzando un programma che stampava un disegno ascii delle carte e
volevo usare i caratteri bassi del ASCII code 3,4,5,6 che rappresentano i
semi delle carte ma con mia sorpresa non vengono rappresentati.Qualcuno sa
come fare??????
Grazie

Andrea,

  I "caratteri bassi del ASCII" sono, in realta`, codici di controllo
originarii delle telescriventi (TTY) e che non hanno una
rappresentazione grafica generalmente accettata. Qualche editor di testo
puo` rappresentarli come semi di un mazzo di carte francesi ma cio`
dipende da molti motivi, tra i quali:
  1. Il sistema operativo;
  2. Il sottosistema che si occupa dell'I/O per la console;
  3. L'insieme di caratteri rappresentabili sul tuo sistema.
  In pratica, non esiste una soluzione nell'insieme del linguaggio C
standard, ossia di quello di cui si discute in questo gruppo. Ti
consiglio di rivolgerti in qualche gruppo piu` vicino al tuo specifico
sistema.
	Alla prossima,
		Marco
Newsgroup: it.comp.lang.c
Titolo: Borland

Ciao ,  c'è qualchecosa da scaricare gratuitamente sul sito  della Borland?
Ciao Roberto    :-)

Ciao ,  c'è qualchecosa da scaricare gratuitamente sul sito  della Borland?
Posso chiederti che cosa c'entra questo col C ?

 Ciao Roberto    :-)
dal punto di bista del C niente, ci sono le patch dei vari *C++ e il BCC
5.5, ma è tutto C++
-- 
Ciao, gengisdave
http://digilander.iol.it/gengisdave

...


 wrote in message
news:8v826p$a8u$2...@lacerta.tiscalinet.it...


Newsgroup: it.comp.lang.c
Titolo: CGI-BIN

Come posso scrivere un programma CGI-BIN da aggiungere alle mie pagine
HTML utilizzando il C/C++?
*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
ATTENZIONE! Rimuovere "
riccar...@iol.it
"
dall'indirizzo email
Saluti by Riccardo
e-mail : 
riccar...@iol.it

HTML utilizzando il C/C++?
certo che puoi però devi aver a disposizione un server http che ti permetta
di scrivere i tuoi programmi compilati in una directory in cui possano
essere eseguiti, di solito si chiama /script/cgi-bin o cgi/bin. (non è molto
diverso da scrivere programmi c o c ++)
Se vuoi ti mando qualche programmino di esempio per server UNIX o Linux che
però
funziona anche su qualche server Windows 95 (Personal Web Server)
Non sono molto esperto ma spero di poterti aiutare.

Newsgroup: it.comp.lang.c
Titolo: Scusate ma il goto.....

Il goto puo' essere utilizzato per spostarsi in un altro file .c?
se si
quale e' la sintassi?
Saluti Marco Noce
--------------------------------
Inviato via 
http://usenet.iol.it

Che mi risulti no......
NM

 quale e' la sintassi?
emacs file1.c
ctrl-x ctrl-f
file2.c
:-)
C:\>iao Angelo
P.S. Al posto di emacs un altro editor a tua scelta

quale e' la sintassi?
Sicuro che il tuo bisogno di questo "goto" particolare non sia il
frutto di un errore di design? Il "goto" puoi quasi sempre evitarlo.
-- 
Marco Barisione (ICQ 84277092)

Newsgroup: it.comp.lang.c
Titolo: informazioni libri

Io ho utilizzato "C Corso Completo Di Programmazione" edito dalla Apogeo,
autori Deitel & Deitel, e mi sono trovato molto bene.
Saluti,
Sergio
.. mi sai dire il costo e se contiene un CDROM?
Grazie 
Ciao

 Ciao
Euro 33,05 e non ha CD-ROM, ma i listati degli innumerevoli sorgenti sono
disponibile in rete sul booksite relativo.
Saluti, buon anno,
Sergio
Newsgroup: it.comp.lang.c
Titolo: Errore undefined reference, come risolvo?

Salve a tutti, quando provo a compilare un programma C mi viene dato
questo errore che non so cosa voglia dire:
    code:
    C:\Users\Angelo\TesinaSRP>gcc -o mio.exe *.c
    /cygdrive/c/Users/Angelo/AppData/Local/Temp/
ccsHT4Mt.o:sistema.c.text+0x1149):
    undefined reference to `_genera_pacchetto'
    collect2: ld returned 1 exit status
Cosa può essere? La funzione è definita, dichiarata non capisco perchè
me lo dia e non so come possa risolverlo.
Cosa posso fare?
Grazie, ciao ciao.


Controllare che non vi sia qualche errore di battitura nello scrivere 
il nome della funzione.
O che se definita ed usata in moduli diversi sia definita esterna 
(cioè non usa 'static').
Ciao
Giovanni
-- 
   A computer is like an air conditioner,
   it stops working when you open Windows.
   Registered Linux user #337974  < 
http://giovanni.homelinux.net/
 >

 questo errore che non so cosa voglia dire:
Senza un minimo estratto del tuo codice, la risposta è ardua.
La funzione è implementata nello stesso sorgente? (da come compili
sembrerebbe no)
Hai incluso nel sorgente dove viene usata genera_pacchetto la firma
tramite un header o definendola esterna?
Il sorgente dove c'è _genera_pacchetto è stato compilato?
Ciao

 Il sorgente dove c'è _genera_pacchetto è stato compilato?
Soprattutto è stato poi linkato al resto del programma?


partiamo con la compilazione ;)
Newsgroup: it.comp.lang.c
Titolo: Curiosità buon metodo per programmare

Salve a tutti, mi è capitato da poco per curiosità di implementare una coda
e uno stack in due modi diversi:
Col primo si rendeva un puntatore a struttura (sia nella coda che nello
stack), col secondo la funzione restituiva un void, ovviamente però
utilizzando un puntatore a puntatore durante l'implementazione. (riporto le
dichiarazioni)
void inserisci_pila (struct elemento**, int);
void inserisci_coda (struct elemento**, int);
struct elemento*queque(struct elemento*,int);
struct elemento*stack (struct elemento*,int);
Dato che praticamente tutte le funzioni si possono implementare ottenendo
gli stessi risultati e la stessa complessità, o rendendo qualcosa (con il
return) o anche restituendo un void e lavorando sui puntatori; la "buona
programmazione" a proposito cosa consiglia o richiede?
Ad esempio nel caso sopra citato, potendo implementare sia la pila che la
coda in due modi diversi, quale risulterebbe migliore?
E' meglio quando si ha la possiblità implementare una funzione che ritorni
un valore (tramite il return) oppure è del tutto indifferente?
Penso che utilizzando le prime due funzioni elencate (usando puntatori a
puntatori, e passando parametri per riferimento) forse il tutto risulti
concettualmente più raffinato, però penso che la funzione perda un pò di
immediatezza, insomma, di sicuro in questo caso il prototipo che restituisce
un puntatore a struttura sembra più elementare.
Cosa ne pensate a proposito?
Kronomor

L'importante e' che in tutte le ADT che implementi e per tutta l'ADT ti
comporti in modo coerente. Ovvero una volta che hai deciso, per tutta la
struttura ed eventualmente altre che implementi non cambi piu'.
Parlando di strutture dati preferisco ritornare una puntatore a struttura
solo ai "creatori", lascio che i "distruttori" ritornino void e a tutte le
altre funzioni faccio ritornare un valore che interpreto come booleano alle
altre funzioni. Ovviamente in tutte le funzioni (tranne i "creatori") il
primo parametro e' un puntatore alla struttura dati.
Cosi' mi risulta piu' facile gestire gli errori, tutte le funzioni che
debbano tornare 1 o piu' valori hanno "la stessa" interfaccia:
BOOL adt_metodo(ADT *, parametri, valori_ritornati *)
Per capire di che errore si e' trattato, preferisco uno o piu' campi
all'interno dell'ADT con opportuni metodi per andarli a ripescare (qualora
il metodo chiamato abbia ritornato FALSE ovviamente) piuttosto che usare lo
stile unix like di indicare con 0 il successo e con altri valori gli errori
che si sono verificati.
-- 
Mox
"Trust the programmer."
"Don't prevent the programmer from doing what needs to be done."
"Keep the language small and simple."
"Provide only one way to do an operation."

 che si sono verificati.
in effetti anche io ho sempre utilizzato il tuo stile, anche perchè cos' mi
è stato insegnato, ma dato che ho scoperto più volte che metà delle cose che
ti insegnano gli altri sono spesso peggiori delle cose che potresti
implementare per conto tuo, allora mi è venuto il dubbio :)
Saluti