mii-community/UsenetArchiveIT-conversations huggingface dataset:
Newsgroup: it.comp.lang.c
Titolo: Accorpamento diverse variabili in un'unica sequenza di byte?

Salve a tutti,
ho alcuni processi (chiamiamoli a, b, c...) che generano dei pacchetti dati 
da inviare ad un altro processo (chiamiamolo alfa), che li raccoglie e li 
elabora. Uso una singola pipe in cui i processi a, b, ecc scrivono, e alfa 
legge: e' vitale quindi che tutti i processi scriventi facciano scritture 
atomiche.
Il problema e' questo: ora i pacchetti mi sono diventati complessi e con 
strutture non omogenee: ad es. potrei avere una scrittura di un int, poi un 
int seguito da double e 3 int, poi un int seguito da una stringa (di 
lunghezza variabile)... vorrei se possibile evitare di dichiarare e spedire 
una struct generica di cui compilare i vari campi perche' porterebbe ad 
un'enorme spreco di spazio (solo la stringa puo' essere lunga fino a 64 kB, 
ma nel 99% dei casi e' lunga 100-200 caratteri).
Vorrei fare come delle write "finte" su uno spazio di byte indistinti, 
accodare i byte delle varie variabili e poi spedire in un sol colpo questa 
struttura come semplice "sequenza di byte indistinti"; il processo 
dall'altra parte sa come e' fatta la struttura e puo' ricavarne i singoli 
campi (semplicemente leggendo l'int, il double ecc).
Si puo' fare una cosa del genere?
Thx,
Pleg 

 Si puo' fare una cosa del genere?
Certo. Credo che su una pipe tu possa proprio usare fwrite (ma poi 
dipende da cosa intendi di preciso per pipe).
E.

 da cosa intendi di preciso per pipe).
Ma fwrite scrive n elementi dello stesso tipo, no? Io devo scrivere elementi 
diversi (un int, un double, una stringa...). Quello che vorrei e' poter 
concatenare i byte di tutti questi tipi in un'unica "struttura" di "byte 
generici" da trasferire poi in pipe con una sola write(), in modo atomico.
Pleg
PS: per pipe intendo proprio quello che apro con "pipe()", e su cui scrivo 
con una write() e leggo con una read() 

 generici" da trasferire poi in pipe con una sola write(), in modo atomico.
puoi definirti delle funzioni che ti scrivono i valori in un buffer
di memoria grezza. Ad esempio per scrivere un int:
char* write_int (int val, char *buf) {
	*(int*)buf=val;
	buf+=sizeof(int);
	return buf;
}
main() {
	FILE *fp=fopen("out","wb");
	char buf[256];
	char *p;
	p=buf;
	p=write_int(1973,p);
	p=write_int(2008,p);
	fwrite(fp,1,p-buf,buf);
}
// E.

Senza usare file forse riesco a usare memcpy in un array di byte 
predefinito. Esempio:
#include <stdio.h>
#include <stdlib.h>
#include <inttypes.h>
#include <string.h>
int main() {
 int i;
 int n1 = -1;
 double n2 = 123.456;
 int nsize = sizeof(int) + sizeof(double);
 uint8_t nconcat[nsize];
 uint8_t *p;
 p = mempcpy(nconcat, &n1, sizeof(int));
 mempcpy(p, &n2, sizeof(double));
 for(i = 0; i < nsize; i++) printf("%02X ", nconcat[i]); printf("\n");
 return 0;
}
In uscita ottengo FF FF FF FF 77 BE 9F 1A 2F DD 5E 40 che sono (una volta 
messe a posto le endianess) le corrette rappresentazioni di -1 (tutti F) e 
123.456 (un po' piu' noioso... ma ho controllato :-)
Pleg 

> Senza usare file forse
Questo non c'entra niente, sorry :-))
Pleg
Newsgroup: it.comp.lang.c
Titolo: che vuol dire?

oggi mi sono imbattuto in questa riga di codice:
fscanf(sgfile,"%*[^\n]");
che cosa legge dal file? sembra una regexp......

 che cosa legge dal file? sembra una regexp......
Dovrebbe beccare tutto ciò che non è \n e saltare l'assegnamento ad una 
ipotetica variabile (che in effetti manca).
Per ulteriori info:
http://www.linuxmanpages.com/man3/fscanf.3.php
Ciao.

 che cosa legge dal file? sembra una regexp......
Un compassionevole modo di svuotare il buffer di input.
L' ho usato anche io tempo fa.
l' asterico significa: acquisisci il formato come da direttiva,
MA NON ASSEGARE AD ALCUNA VARIABILE!!
es: fscanf(stdin,"%s%*d%s",primastringa,secondastringa);
un input cosi':
parola1 1234 parola2
parola1 e parola2 dovrebbero essere acquisite, mentre numero buttato via.
la sistassi [^\n] senza * acquisirebbe una stringa (quindi il target
dovra essere un puntatore a char) di quansiasi carattere diverso da \n
che quindi rimarra' come prossimo carattere di input.
esempi:
char stringa[1024];
fscanf("%[abcdefghilmnopqrstuvz]",stringa);
acquisisce l' input in stringa solo i caratterei nel set e si ferma
al primo carattere  differente che rimarra' pronto per il prossimo
input. esempio si fermeta' al passaggio di 'w'  o di 'j' ...
^ e' una vegazione del set.
fscanf("%[^XYZ]",stringa);
acquisisce tutto l' input, anche CR LF in stringa fino al riconoscimento
di uno dei caratteri del  o Y o Z che rimarra' come prossimo input.
vado a mente quindi leggi man 3 scanf e fai prove.
Ti suggerisco di non farne uso estremo. Ti racconto:
codice che funzionava in TurboC su dos anni fa non funzionava piu'
bene su Slackware con vecchissime Libc.
/* aquisisce numero, elimina spazi e tabs e acquisisce un char*/
#include <stdio.h>
int main()
{
  int numero = 0;
  char carattere = 'Z';
  scanf("%d%*0s%c",&numero,&carattere);
  printf("%d %c\n",numero,carattere);
  return (0);
}
In Turbo C acquisiva il numero, poi la stringa di precisione
0 caratteri (niente), ma per fare questo doveva comunque allinearsi
al prossimo carattere diverso da blank e non assegna ad alcun puntatore,
poi acquisiva il char.
Le vecchie libc delle slackware (non ricordo la versione) la seconda
direttiva di formato eliminava anche il carattere flag che mi interessava.
ora con le Libc che uso ora se invece di "%*0s" metto "%*0[\n ]" funziona,
ma ho abbandonato questa tattica da molto per mancanza di fiducia
nell' interpretazione estrema degli standard.
Ciao
Roberto.
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it
Newsgroup: it.comp.lang.c
Titolo: Problema con il return di una funzione...

Salve, ho un problemino riguardante il return di una funzione,
infatti non so come poter ritornare dalla seguente funzione i valori di
h->h_name
inet_ntoa(*((struct in_addr *)h->h_addr)));
Il codice sottostante satampa i valori su schermo,
ma come fare per farli ritornare ad un altra funzione ?
Io ho provato mettendo nella funzione give_local_hostname ();
return ( h->h_name );
e poi mettendo nella funzione principale:
char hostname[100];
hostname = give_local_hostname ();
ma non funziona :I
Grazie, aiutooo ;)
G.Gabriele
CODICE:
int give_local_hostname ( )
{
  char hostname[100];
  struct hostent *h;
  gethostname ( hostname, 100);
  if ((h=gethostbyname(hostname)) == NULL) {  /* get the host info */
            herror("gethostbyname");
        }
        printf("Host name  : %s\n", h->h_name);
        printf("IP Address : %s\n",inet_ntoa(*((struct in_addr
*)h->h_addr)));
        return 0;
    }
--
+ 
g.gab...@europe.com
 ---------------+
|                               Linux  |
+---------------- the free philosophy -+


get_local_hostname() deve ritornare un puntatore a char (char *).
hostname non e' un puntatore a char ma un array di char e
l'assegnamento 'hostname=give_..." non funziona.
char *give_local_hostanem() { ..... return h->h_name; }
char *hostname=give_local_hostname();
Attenzione: gethostbyname() ritorna un puntatore a un'area statica che
verra' sovrascritta alla chiamata successiva. Puo' essere il caso
mettere il nome da parte copiandolo:
#include <string.h>
#include <stdlib.h>
char *tmp;
char *hostname=0;
....
tmp=get_local_hostname();
if (tmp)
  {
    int l=strlen(tmp);
    if (hostname)
      free(hostname);
    hostname=malloc(l+1);
    strcpy(hostname, tmp);
  }
else
  tmp=0;
Saluti, Alberto.

 Saluti, Alberto.
Grazie per l'aiuto Alberto ;)
ora e' tutto apposto.
Ciao, G.Gabriele

Newsgroup: it.comp.lang.c
Titolo: Perchè non funziona ?

#include <stdio.h>
int main (){
int a;
scanf("%d",&a);
printf(" A= %d ",a);
return 0
}
Il codice viene compilato normalmente, mi fa leggere il valore di a, però non
lo stampa, come mai ?
N.B.
Con il compilatore DJGPP funziona, in Linux con GNU no.
-- 
Posted from 
ip157-12.dialup.edisontel.com
 [62.94.3.158] 
via Mailgate.ORG Server - 
http://www.Mailgate.ORG


Talking about music is like dancing about architecture.
                -- Laurie Anderson

lo stampa, come mai ?
Prova a forzare l'"a capo" con 
printf("a = %d\n", a);
Newsgroup: it.comp.lang.c
Titolo: accuratezza cifre

Sto appena imparando a programmare (in C, ma immagino sia identico in tutti
i linguaggi) e mi scontro con il problema dell'accuratezza dei calcoli. E'
tutto molto semplice di primo acchitto, ma poi mi accorgo di avere le idee
confuse quando confronto due diversi set di note e wikipedia
http://en.wikipedia.org/wiki/Single_precision
Rimaniamo con i numeri a single precision. Prendiamo una cifra a 32 bit,
1bit per il segno, 23bit per la mantissa e 8bit per l'esponente.
I numeri interi che posso scrivere variano tra -2^(n-1) e 2^(n-1) - 1
Con i 23 bit della mantissa e il 1 bit del segno posso fare 2^(24-1) ovvero
log10(2^23)~7 cifre significative, giusto?
DUBBIO 1) non ho ben chiaro se quando ho solo cifre posivite il bit del
segno posso usarlo per la mantissa?
Con l'esponenziale posso fare massimo 2^(2^(n-1)-1) = 2^127 ~ 1.7e38
e minimo 2^(-2^(n-1)) = 2^-128 ~ 2.4e-39
questo quanto trovo su di un libro, ma su delle altre note vedo 2^128 e
2^(-126) e su wikipedia 127 e -126 per max e minimo esponente.
DUBBIO 2) Perche' queste differenze?
DUBBIO 3) Prediamo esponenziale massimo nell'ordine di 1e38 e la mantissa
che va fino a circa 1e7, la cifra piu' grande che potrei fare non sarebbe
1e45 ? Oppure vuol semplicemente dire che posso arrivare a 1e38 con le mie
sette cifre, cioe' 9.9999999e38 ?
Qualcuno sa dipanare i miei dubbi!?
Grazie mille!
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/


E' tutto abbastanza semplice.
Come prima cosa è subito meglio dire che lo standard C (come la
maggior parte degli altri linguaggi), prevede l'accuratezza delle
operazioni sui numeri in virgola "come fa il processore", quindi è in
teoria (e anche in pratica) possibile che ogni macchina abbia
risultati leggermente differenti.
Detto questo, sono definite nel linguaggio delle costanti che possono
essere usate per capire, su ogni macchina, come quel tipo di dato
verrà definito: così come esistono per i tipi interi CHAR_MAX o
INT_MAX, esistono anche FLT_MAX (e altre utili informazioni come
FLT_MANT_DIG, FTL_DIG, FLT_RADIX, etc.etc.) sia per float che per
double e long double.
Se necessiti di molta precisione nei calcoli devi per forza vedere
come questi numeri sono definiti per i target della tua
implementazione.
Ciao!

 segno posso usarlo per la mantissa?
No. Sennò come fai a sapere se è positivo?
E.

 sette cifre, cioe' 9.9999999e38 ?
la seconda. E inoltre ricordati che in questo range NON tutti i numeri
sono rappresentabili.
Ad esempio se avessi 2 bit di mantissa potresti rappresentare lo 0.5,
lo 0.25, lo 0.75 ma non lo 0.3.
Ciao Jack

Newsgroup: it.comp.lang.c
Titolo: Lettura file remoti

Ciao a tutti!
Come si fa da un programma scritto in C a leggere file remoti http://.....?
In alternativa, mi basterebbe  avere un eseguibile che mi consenta
periodicamente di scaricare un file da internet e poi processarlo in locale
con un mio programmino C.
Grazie e ciao,
Beppe.

]
Newsgroup: it.comp.lang.c
Titolo: Aiuto Lcc-win32

Salve,
ho scaricato da internet il compilatore per C  lcc-win32 ma quando creo dei
programmi dopo averli eseguiti una volta mi appare premi un tasto per
continuare e dopo averlo fatto mi viene la scritta file batch mancante cosě
non posso eseguirlo una seconda volta!!
Qualcuno sa dirmi il perchč?? metto i miei file in una directory sbagliata??
Inoltre quali compilatori per C sono reperibili da internet e qual'č un buon
compilatore??

Davide ha scritto nel messaggio ...

Anche a me lo fa, ma non mi da nessun problema. Anzi, spesso e utile perché
se no la finestra del prompt tende a chiudersi da sola alla fine del
programma (molto comodo, complimenti alla microsoft per l'idea...). Si va su
execute... si fa eseguire il programma, quando ha finito si preme un tasto,
si chiude il prompt e si fa nuovamente execute. A me non ha dato probelmi...
Ciao,
Zeppe

"chiudi all'uscita"
Si, va beh, ma non con tutte funziona (almeno da me) e in molti casi viene
male farlo (quando si fanno girare eseguibili che di solito non si usano...)
Ciao,
Zeppe

Newsgroup: it.comp.lang.c
Titolo: Settaggio editor di Codeblocks

Sapete come si setta l'editor di Codeblocks in modo tale da avere
 
il rientro automatico quando si dichiarano le variabili?
 
Nell'esempio, int numero; non è allineato a printf("%d\n",numero);
 
 
 
 
#include <stdio.h>
int main(void)
{
 
   int numero;
       printf("%d\n",numero);
       return 0;
}
 
 
 
Ciao
nero23
 
 


 
Sto cercando in tutti i modi di riprodurre la stessa cosa con
codeblocks su windows e linux e credimi, mi ï¿œ impossibile
andare a capo in corrispondenza di "numero" invece che di "int".
Non stai trollando vero? : ) Ciao.
 
 
-- 
Vincenzo Mercuri

 Non stai trollando vero? : ) Ciao.
 
 
L'ho visto nel quinto video scaricato da questo sito:
 
 
https://didattica.polito.it/pls/portal30
 
/sviluppo.videolezioni.vis?cor=24&lez=704
 
 
lo dice anche il professore ( 35 minuti dopo l'inizio)
 
Ciao
nero23


Premesso che sono 40 lezioni e di sicuro non ï¿œ la prima che
hai linkato. Ma credimi, non riesco a sbagliare nel modo che
riporti tu. Dopo la linea premi invio e torni a capo. Buh! : )
 
PS: che professore soporifero!
 
-- 
Vincenzo Mercuri

 riporti tu. Dopo la linea premi invio e torni a capo. Buh! : )
 
 
 
ï¿œ descritto dopo 35 minuti del 5 video.
ciao
 



Forse ho capito cosa vuoi dire.. tu vuoi rientrare di proposito
sotto a "numero", non che sia un errore.
Allora aiutati con tab, fai cosï¿œ:
 
(premi tab)int(premi tab)numero;(invio)
               (premi tab)printf(...);
 
-- 
Vincenzo Mercuri


Che io sappia non c'ï¿œ modo di automatizzare l'indentazione diversa per
dichiarazioni e resto del codice con codeblocks, non so neanche se
altri ide piï¿œ avanzati hanno opzioni del genere. Molto semplicemente
si usa tab che premuto una volta ti permette di avanzare di un numero
di spazi che (quello si) si puo' impostare.
 
-- 
Vincenzo Mercuri
Newsgroup: it.comp.lang.c
Titolo: PICCOLE SPIEGAZIONI

Ciao
cosa sono i formattatori di campo cioč questi simboli:
%u , %f %x?
Che cosa significa il float?
grazie
ciao
-------------------------------------------------------
Messaggio inviato da 
http://www.sandlab.org/newsgroup/
Accesso gratuito via web ai Newsgroup

Che cosa significa il float?
il float é un tipo di dato...
permette di gestire numeri che hanno una parte decimale,
cod

Ciao
vorrei sapere cosa sono le cifre significative di precisione.
A che cosa serve il void type?
Perchè gli indirizzi delle variabili e dei puntatori vengono espressi in
notazioni esadecimali?


 notazioni esadecimali?
   Perche` molto spesso lo spazio di indirizzamento delle macchine e` 
numerato in multipli di due; con la notazione esadecimale si ottiene un 
formato piu` compatto e congruente di facile comprensione visiva.
--
Alla prossima,
Marco

Ciao
che cosa sono gli indirizzi seg:off e indirizzi lineari?
Quando ho la scrittura:
float numero;
float *numPtr;
numero = 12.5
numPtr = &numero
Che espressione devo usare per sapere l'indirizzo del puntatore *numPtr?
GRAZIE 


Accesso gratuito via web ai Newsgroup
cod


I'm not prejudiced, I hate everyone equally.

Ciao
che cosa sono gli indirizzi far e huge e a che servono?
inoltre Dev-C++ č un buon compilatore anche se lo uso con
sorgenti scritti in linguaggio C?
grazie 


sorgenti scritti in linguaggio C?
Il Dev-C++ non lo conosco.
ciao, acc.   
a...@libero.it

sorgenti scritti in linguaggio C?
si; come la gran parte dei compilatori C++ compila anche il codice C;
anzi, compila meglio quest'ultimo che non quello C++.
Anto
--
Antonio Cuni, 19 anni, studente
Brainbench C++ Master: 4.6, higher than 98% of all previous test takers.
C Language: 3.32, higher than 79% of all previous test takers.
Guida C/C++ di Programmazione.it: 
http://cpp.programmazione.it

Newsgroup: it.comp.lang.c
Titolo: Manuale di C

Ciao a Tutti
Qualcuno saprebbe consigliarmi un buon manuale di C oppure qualche sito dove
trovare qualcosa?
Daniele

 wrote in message
D9iX4.50349$EY1.5...@news.infostrada.it...

Le FAQ sono lě per quello! (vedi firma)
ciao ciao
Marco
--
Marco Coppo
University Of Sheffield
FAQ di it.comp.lang.c:
http://www.programmazione.it/linguaggi/c/itcomplangc.htm
Newsgroup: it.comp.lang.c
Titolo: Dove le trovo

Copiando del codice da un tutorial, così per vedere come funzionava, mi sono
stati richiesti due header che però non ho, per la precisione netdb.h e
sys/socket.h , così ad occhio dovrebbero essere abbastanza standard, visto
che lì li citano senza spiegarli.
Ora la domanda è dove posso scaricarli?
Ho trovato parecchi site in cui spiegano il contenuto ma nessuno in cui si
potessero scaricare.
Grazie in anticipo per l'aiuto.
--
Manny Calavera
Sito Personale: 
http://www.infinito.it/utenti/dices29
Sito Professionale: 
http://spazioinwind.libero.it/dice/
Antispam: CAVA²

 che lì li citano senza spiegarli.
No, non sono standard.
Ad ogni modo ho idea che se utilizzi windows farai fatica a trovare
quell'header!
Tommy

 Ora la domanda č dove posso scaricarli?
http://www.gnu.org/directory/libs/c/glibc.html
Forse :-)
C:\>iao Angelo
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 Grazie in anticipo per l'aiuto.
Beh, quelli sono header di linux, e se hai linux mi pare difficile che tu
non abbia le glibc, credo tu abbia windows, ed in quel caso ti suggerisco
di cercare documenti sulla programmazione di rete relativi al tuo OS.
Ciao Ciao
-- 
--------------------------------------------
- Non ti ricordi Abelard? Una volta ti ho 
  detto che l'estasi è meglio che essere Dio.
- Me ne ricordo.
- Mi sbagliavo, tesoro. essere Dio è meglio.
--------------------------------------------

 al tuo OS. Ciao Ciao
Capisco, in effetti ciò (wind)Oz.
A questo punto è lecito pensare che è un tutorial fatto con i piedi visto
che non specificavano che era solo per linux.
Grazie per le spiegazioni ed "a presto"


 che non specificavano che era solo per linux.
Con la versione 2 di winsock puoi lavorare in modo molto simile sulle 2 
piattaforme: guarda su MSDN la guida su winsock2 ed eventualmente sull'help 
dell'LCC per scoprire in che header trovi il prototipo delle funzioni che 
ti servono.
-- 
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."
Newsgroup: it.comp.lang.c
Titolo: Dove sbaglio ?

Ciao a tutti !
Premesso che e' da pochi giorni che ho iniziato a studiarmi C, desidero
crearmi uno script che mi cancelli i file inutili.
Ho provato con :
#include <stdio.h>
int main()
{
char *a ="/home/pippo/prova";
int remove (const char *a);
return 0;
}
 
Il gcc non mi da errori , ma il file prova non viene cancellato.
Dove sbaglio ?
Ciao e grazie.
-- 
 	"Anche il viaggio piu' lontano inizia dal primo passo."
                                    	    ( Lao Tsu )

 scriveva: 
 t> Premesso che e' da pochi giorni che ho iniziato a studiarmi C, desidero
 t> crearmi uno script che mi cancelli i file inutili.
 t> Ho provato con :
 t> #include <stdio.h>
 t> int main()
 t> {
 t> char *a ="/home/pippo/prova";
 t> int remove (const char *a);
 t> return 0;
 t> }
 
 t> Il gcc non mi da errori , ma il file prova non viene cancellato.
NB.  Se  compili passando  a  gcc l'opzione  -Wall  ti  accorgi che  hai
definito la variabile a, senza però usarla.
Questo  mette sull'avviso  che qualcosa  di  errato dal  punto di  vista
logico ci sia.
L'errore sta proprio dove dici:
                      int remove (const char *a);
Così non invochi la funzione,  ti limiti a definirne il "prototipo"(cosa
di per sè più che corretta).
In pratica  il tuo  programma si  limita a definire  una variabile  e un
prototipo di funzione per poi uscire _con successo_ (return 0), senza in
realtà aver combinato alcunchè.
#include <stdio.h>
int remove (const char *a);
int main()
{ 
  char *a ="/tmp/prova";
  int retval = 0;
  retval = remove(a);
  return retval;
}
 
Spero di  non aver detto troppe  castronerie, anche io "studio"  il C da
poche ore.
Tra l'altro, retval vale 0 in caso di successo e -1 in caso contrario.
-- 
GHERdO, You Will Be Assimilated. You Love Gnus.

Newsgroup: it.comp.lang.c
Titolo: AIUTO ALBERI( T R O N C I)

bella a tutti sono uno studente di informatica al primo anno alla
sapienza,qualkuno a fatto programmazione alla sapienza col proff Tronci,se
si mi servirebbe una mano a sviluppare i programmi sugli alberi,che chiede
all esame.
grazie mille..


Cioè ? che cosa chiede di preciso ?
Newsgroup: it.comp.lang.c
Titolo: Domanda facile

   Scusate ma sono nuovo nel C e in questo NG, ho una domanda semplice:
   ho scritto un prg. per scrivere in un file e poi leggere dallo stesso.
La scrittura funziona ma quando leggo cosi':
  filein=fopen("filenome","r");
  while (feof(filein)!=1)
     fgets(line, sizeof(line), filein);
       strcpy(stringa, line);       /*qua uso una lista in realta'*/
  end while
mi legge l'ultimo elemento del file due volte.
Perche'?
Grazie mille dell'aiuto
Nikolaj

   end while
Il problema e' che prima di capire se sei arrivato o no alla fine del file
devi fare una lettura a vuoto, ovvero una delle funzioni che devono leggere
da file provano ma vengono interrotte perche' il sistema operativo comunica
l'EOF.
Nel tuo caso all'ultima linea feof() ritorna false, la fgets() legge
l'ultima linea... ricomincia il ciclo, la feof() ritorna ancora false
perche' nessuna funzione ha ancora provato a leggere, la fgets pero' ci
prova e fallisce lasciando inalterato line... che viene ricopiata
(inalterata). Al ciclo successivo feof() ritorna finalmente true.
Sempre nel tuo cas,o il modo piu' semplice per capire se sei arrivato ad EOF
e' cambiare il ciclo cosi':
    while (fgets(line, sizeof(line), filein))
        strcpy (stringa, line);
la fgets() ritorna NULL quando arriva ad EOF.
-- 
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."

 Funziona!
 Grazie di cuore ragazzo, veramente grazie!
Ciao
Nikolaj

Newsgroup: it.comp.lang.c
Titolo: [Guida] Come realizzare file header

Scusate il quesito molto stupido 
ma come si realizzano di fatto i file header ?

 ma come si realizzano di fatto i file header ?
con un editor di testo o con lo stesso editor che scrivi i sorgenti c ...
ci metti solo le dichiarazioni delle strutture costanti e funzioni e
ricordati le parti essenziali cioe' :
#ifndef _<nome>_H
#define _<nome>_HPP
#ifdef __cplusplus
extern "C" {
#endif
tue definizioni
#ifdef __cplusplus
}
#endif
#endif /* _<nome>_HPP */
cambia <nome> con il nome del tuo file header in maiuscolo
ciao

 #endif /* _<nome>_H */
ops scusa ... ti ho copiato un header base mio di quelli per file cpp ;-)
cancella le pp dopo l'h
ciao

 #ifdef __cplusplus
__cplusplus è un nome a tuo piacere o è altro ?

 __cplusplus è un nome a tuo piacere o è altro ?
no e' una define di ambiente del C++ e serve per creare header compatibili e
compilabili anche con un compilatore C++
per leggere di piu' su cio' o lo cerchi su google o leggi il manuale del tuo
compilatore che dovrebbe fornirti tale informazione, se recente (o guarda
sempre un manuale di un compilatore C++)
ciao

il mio compilatore sotto win č il dev-cpp
sotto linux uso gcc
Newsgroup: it.comp.lang.c
Titolo: Letture non bloccanti da pipe

Salve a tutti,
come faccio a fare una lettura non bloccante da una pipe? Al momento creo la 
pipe e faccio una fork, poi il processo genitore fa una read dal suo lato 
della pipe. Come faccio a rendere questa read non bloccante? Mi pare d'aver 
capito che devo usare la ioctl o la fcntl, ma non trovo esempi, mi potreste 
indirizzare su uno o fare un esempietto della sintassi e di come usare 
queste funzioni (e che differenza c'e' fra le due)?
Thx,
Pleg 

 della pipe. Come faccio a rendere questa read non bloccante?
if(pipe(fd) < 0)
fprintf(stderr, "Error create pipe\n");
...
fcntl(fd[0], F_SETFL, O_NDELAY); // O_NONBLOCK
..
if(read(fd[0], &var, sizeof(int)) > 0) {
...
Salut.
Newsgroup: it.comp.lang.c
Titolo: gestione file

Ciao a tutti. Vi ringrazio per avermi consigliato la libreria gtk, credo sia 
proprio quello che cercavo. ho trovato dei tutorial e credo di capire 
abbastanza anche se � un c molto diverso da quello standard...
ora vorrei capire un altra cosa:
lavoro sotto windows, e vorrei fare qualcosa che agisca sui file e le 
directory di windows. per esempio spostare i file da una directory ad un 
altra, o cancellarli o rinominarli insomma poter scrivere un codice che 
agisca sui file del sistema operativo. ho letto che la standard ha un paio 
di funzioni ma sono sconsigliate e consigliano windows.h.
per caso nel gtk esiste una sezione che faccia al caso mio? ho letto che nel 
gtk oltre alla grafica ci sono moltissime altre funzioni.
volevo anche chiedervi se � possibile nascondere la finestra dell dos o 
prompt dei comandi quando faccio partire un eseguibile con la grafica. 
vorrei che venisse visualizzata solo la finestra coi pulsanti senza quella 
nera che sta dietro.
grazie mille
saluti 

 gtk oltre alla grafica ci sono moltissime altre funzioni.
http://www.gtk.org/documentation.html
Ciao Jack

 
questo non so che dirti.... magari se recupero una macchina con windows
faccio una prova.

va beh oggi sono buono...
info su blig:
g_lstat  per avere info sui file
g_remove per rimuovere file o directory
g_rmdir  per rimuovere directory
g_mkdir  per creare directory
g_reanme per rinominare file
per copiare un file invece puoi usare g_file_get_contents e
g_file_set_contents
esempio di copia file con glib:
#include <glib.h>
#include <stdio.h>
#include <stdlib.h>
int main( int argc, char *argv[])
{
  gchar *contents;
  gsize lunghezza;
  GError *err = NULL;
   if(argc!=3) {
    printf("Usare: gcp <origine> <destinazione>\n");
    exit(1);
  }
  g_file_get_contents (argv[1], &contents, &lunghezza, &err);
  if (err != NULL)
  {
    fprintf (stderr, "impossibile scrivere: %s\n", err->message);
    g_error_free (err);
    exit(1);
  }
  else
  {
    g_file_set_contents(argv[2],contents,lunghezza,&err);
  }
exit(0);
}

 ha scritto nel messaggio 
news:90iGm.87708$9f6.1...@twister1.libero.it...

grazie mille, appena ho tempo mi studio tutte le funzioni.
visto che oggi sei di buon umore ne approfitto per chiederti un altra cosa:
ma quando faccio un programma in cui uso gli header di gtk, quando poi creo 
l'eseguibile, devo allegare le librerie?
mi sono informato un po riguardo librerie statiche e dinamiche ma non ho 
capito quali lo sono e quali no...
grazie ancora per la pazienza.
ciao
Newsgroup: it.comp.lang.c
Titolo: switch()

I casi dello switch devono essere per forza interi o possono essere anche
dei caratteri???
carattere:     case '/' : printf("Prova0"); break;
intero:          case 2: printf("Prova1"); break;
Su molte guide c' č scritto che i casi possono essere solo degli int ma, non
credo sia cosě...
rispondetemi e grazie per le altre risposte che mi avete dato.
ciao
----------------------------------------------------------------

 anche dei caratteri???
[...]
I caratteri vengono rappresentati con degli interi, quindi li puoi 
usare tranquillamente.
Saluti
-- 
Per l'e-mail rimuovere la frase in maiuscolo e gli underscore.

 credo sia cosě...
scusa, perche' non provi ?
comunque funziona,
e se vuoi avere una sopresina esegui:
printf("size = %d\n",sizeof('x')); e
printf("size = %d\n",sizeof((char)'x'));
ciao.
g.

 printf("size = %d\n",sizeof((char)'x'));
che sorpresa ??? tutti e 2 sono char di dimensione 1 ... che sorpresina
doveva avere ???
ciao
ps: semmai negli switch vengono automaticamente castati, seno' sarebbero
normai char e non int ;-)

doveva avere ???
 'x' e` un int, e quindi sizeof('x')==sizeof(int), mentre
sizeof((char)'x')==(sizeof(char)"sono un puntatore")==sizeof(char)==1
secondo lo standard, su tutti i compilatori conformi.
-- 
S.L.

doveva avere ???
sizeof('x') = sizeof(int) e non sizeof(char), almeno fino al C89.
Non so se nel nuovo standard abbiano allineato le dimensioni come in
C++.  In C++, sizeof('x') = 1.
-- 
Andrea Laforgia
Open Delphi Manual
http://groups.yahoo.com/group/delphi_open_manual/

 doveva avere ???
il primo stampa 4 il secondo stampa 1, almeno sul mio compilatore.
ciao.
g.

 che sorpresa ???
tu stai studiando un libro di C++ e rispondi sui NG di C.....
In C++ hai ragione, ma qui, in C, sizeof('x') == sizeof(int).
Tommy

 ha scritto nel messaggio
news:sru5jvo8p6ip5tsuk...@4ax.com...

con il gcc mi sono venuti fuori due valori 1 ... quindi non e' standard ???
ciao

 C++.  In C++, sizeof('x') = 1.
devo provare con il gcc forse ho cannato compilando con il g++ ... riprovo
...
ciao

 ha scritto nel messaggio
news:bh0mg9$2d1$1...@titan.btinternet.com...

ho cannato compilando con il g++ ... ora riprovo ...
ciao

 ha scritto nel messaggio
news:bh0mg9$2d1$1...@titan.btinternet.com...

purtroppo con qualsiasi versione, gcc c++ g++ mi trovo sempre le due
dimensioni di risposta 1 ...
mi sa che il mingw hanno cannato a compilarlo o non e' standard il gcc 3.2.3
...
ciao
Newsgroup: it.comp.lang.c
Titolo: Alè

Dopo 3 giorni di attesa ho avuto la mia squadra, alè!
Domani ho l'esordio in campionato.. Nel frattempo, prima di leggermi
il manuale del gioco, ho fatto i primi investimenti settore giovanile
e mi sono buttato nelle prime aste selvagge.
Sto cercando di comprare uno sconosciuto portiere di belle speranze
dalla V serie Danese. Il Mio fa schifo.. L'asta finisce alle 15.08.
Yu Uh.
Cathàll - Borussia DortMust - VI.90
Cat.
Fondatore 
http://orianiforum.da.ru
     --     Organizzatore 
http://fantacalcio.clarence.com
Webmaster 
http://www.basketcorato.it
 --   Collaboratore 
http://www.interisti.org
"SKY: Se tu ami il calcio, il Calcio ama te" ..A meno che tu non sia dell'Inter.

 Yu Uh.
Tutto cio' e' naturalmente off-topic in it.comp.lang.c.
-- 
Enrico 'Trippo' Porreca

 Yu Uh.
Naturalmente tutto cio' e' off-topic in it.comp.lang.c.
-- 
Enrico 'Trippo' Porreca

Naturalmente tutto cio' e' off-topic in it.comp.lang.c.
Avrò mica forse sbagliato NG ?


>Avrò mica forse sbagliato NG ?
bhe.. C non sta certo per serie C....

Newsgroup: it.comp.lang.c
Titolo: IPC (Interprocess Communication)

Avrei la necessità di utilizzare IPC in un mio programmino su linux.
Di solito usavo i socket ma ho sentito parlare bene del d-bub!
Ho visto altre alternative voi cosa utilizzate di solito.
I dati da spostare sono molto pochi!
Voi cosa mi consigliate?
Xeus32


So già di essere fuori dal coro ma, nel caso si possa scegliere (e
spesso non si può), secondo me niente è meglio della pura shared
memory (mai rendere complesse le cose semplici...).
Su linux la famiglia di funzioni shmXXX dovrebbe andare.
Ciao!

 Su linux la famiglia di funzioni shmXXX dovrebbe andare.
Ho letto la man page di shmget,shmap e....
Ho fatto il mio primo codice e funziona abbastanza bene.
Dico abbastanza bene perchè non mi chiude la shared memory!?!?!
1)Qual'è il comando per distruggere l'area di memoria?
2)Ovviamente devo usare i semafori per gestirla?!?
3)Non ho capito se posso ridimensionare l'area di memoria o sono 
costretto a distruggerla e ricrearla!
4)Quanto grande posso fare l'area di memoria? Io penso di aver necessità 
di circa 1MB di memoria!
Ciao

 Ciao
Ciao!
Newsgroup: it.comp.lang.c
Titolo: puntatori a funzioni

salve
un puntatore a funzione e' un puntatore che contiene l'indirizzo
del primo byte del codice di una funzione giusto ?
bene ora ..
come posso richiamarmi questa parte di codice utilizzando
questi benedetti puntatori a funzioni ??
mi servirebbe qualche esempio per schiarirmi le idee ....
grazie in anticipo

grazie in anticipo
Non c'e' di che
Beppe

funzione e' = al suo indirizzo, un po' come per i vettori):
Attenzione, il nome di una funzione non e' *uguale* al suo indirizzo
ma, alla stregua degli array, *decade* nel suo indirizzo.
Cioe' nell'espressione riportata di seguito :
extern double somma();
int (*fnptr)() = somma;
Il nome somma viene implicitamente sostituito dal suo indirizzo.
E' una piccola differenza che e' bene sottolineare.

mi servirebbe qualche esempio per schiarirmi le idee ....
#include <stdio.h>
typedef void ( * verso ) () ;
/* definisce il tipo di puntatore a funzione */
void abbaia ()
{
     puts ( "bau bau\n" ) ;
}
void ruggisci ()
{
     puts ("grooooarrrr !\n" ) ;
}
void cinguetta ()
{
     puts ("cip cip cip\n" ) ;
}
void esegui_verso ( verso f )
/* esegue la funzione che gli viene passata per riferimento tramite il
suo indirizzo  */
{
     f() ;
}
int main()
{
    int c = 0 ;
    extern void svuota_buffer() ;
    while ( c != '9' )
    {
          puts ( "\nesegui la tua scelta :" ) ;
          puts ( " 1 - cane" ) ;
          puts ( " 2 - leone" ) ;
          puts ( " 3 - uccello" ) ;
          puts ( " 9 - esci" ) ;
          printf ( ">" ) ;
          c = getchar() ;
          svuota_buffer () ;
          switch ( c )
          {
              case '1' : esegui_verso ( abbaia ) ; break ;
              case '2' : esegui_verso ( ruggisci ) ; break ;
              case '3' : esegui_verso ( cinguetta ) ; break ;
          }
    }
    return 0 ;
}
void svuota_buffer ()
/* svuota il buffer della tastiera dopo getchar() */
{
     int d ;
     while ( ( d = getchar() ) != '\n' ) ;
}

E' una piccola differenza che e' bene sottolineare.
Avevo semplificato per Daniele, ma concordo nella precisazione.
Beppe

Newsgroup: it.comp.lang.c
Titolo: Problema con SQL in C

Sto interfacciando un db realizzato con postgres in C. Non riesco a
passare alla query una variabile esempio:
res=PQexec...........DECLARE mycursor CURSOR FOR.........WHERE
matricola= matr;
dove matr è una variabile intera. 
Mi potete aiutare
Grazie
Ciao

 dove matr è una variabile intera.
sprintf(stringa,"%d",intero);
-- 
-=[]=---iAN CooG---=[]=-
In Cuesta Frase Ci Sono Tre Erori !
Newsgroup: it.comp.lang.c
Titolo: aiuto sul portatile!!

Ragazzi ho comprato un portatile della Sony, nuovo, un modello recente, su
cui ho provveduto a installare il turboC. Non riesco a fare la parentesi
graffa!!!!!
qualcuno lo sa??
con alt + shift + parentesi quadra non funzia!!
Aiutatemi!!!

 graffa!!!!!
Prova con ALT+123 e ALT+125.
Tommy

 ha scritto nel messaggio
news:c15cge$66m$1...@hercules.btinternet.com...


 e cosa uso???
?!?
non capisco la domanda, scusami!
Tommy

 e cosa uso???
Se ti riferisci a compilatori, ti suggerisco gcc (principalmente perche' 
e' molto completo ed ha costo 0).
Se vuoi un ambiente di sviluppo, si parla bene di Dev-C++ (basato sul 
gcc), ma io non l'ho mai usato.
-- 
/**
  * Mattia Belletti - Undergraduate student @ 
cs.unibo.it
  * ICQ: 33292311   - email: 
mbel...@cs.unibo.it
  * IRC: BluShine   - site(s): 
http://cs.unibo.it/~mbellett
  * Linux registered user 299762 @ Linux registered machine 213003
  */

 ha scritto nel messaggio
news:c15lg3$fau$1...@le1.cs.unibo.it...


http://gcc.gnu.org/
Ciao.
Gio
Leonardo Fibucchi ha scritto:


 ha scritto nel messaggio
news:4036945F...@tin.it...


Prova a scaricare da qua.
http://www.binarycode.org/gcc/releases/
Comunque ci sono altri mirror da cui puoi scaricare :
http://gcc.gnu.org/mirrors.html
Ciao


 gcc), ma io non l'ho mai usato.
E' un prodotto molto buono, visto anche il fatto che e' free, e a parte
che qualche volta "scazza" (passatemi il termine :) l'indent.
http://www.bloodshed.net/dev/devcpp.html
C'e' anche la versione gia' con gcc incluso.
bye
-- 
= active @ oldskool.actisystem =
GIT d- s:+>: a-- C+++ UL++++ P+ L+++ E--- W+ N+ 
o? !K w-- O-- M- V? PS+(++) PE Y+>++ PGP++ !t 5? 
X++(+) R(+) tv+(++) b+>++ !DI D+ G e h! r++ x*

 ha scritto nel messaggio
news:LEpZb.350021$_P.11...@news4.tin.it...

In tutti i portatili c'e' un tastino che si chiama "FN" o simili che serve
per attivare il tastierino. Nei portatili il tastierino è formato da alcuni
tasti che generalmente sono le classiche lettere i quali hanno anche un
numerino(colorato in maniera differente) disegnato sul tasto. Esempio: il
tasto che normalmente si utilizza per scrivere la lettera H ha accanto un
numerino di colore blu. Se pigi contemporeanamente il tasto FN che di solito
sta vicino il tasto ALT sinistro ed il tasto H scriverai il numero
associato.
Magari nel tuo portatile il tasto H non contiene numeri ma sicuramente altri
si'.
Quindi per scrivere la parentesi graffa "{" pigia contemporeanamente
alt+fn+123 per scrivere la parantesi graffa "}" pigia alt+fn+125 dove il
segno + sta per contemporeanamente.
Ciao Tony
---
Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (
http://www.grisoft.com
).
Version: 6.0.592 / Virus Database: 375 - Release Date: 18/02/2004
Newsgroup: it.comp.lang.c
Titolo: Dimensione tipi in C99

Salve e buon anno a tutti.
So che in C++ le dimensioni dei tipo sono date da:
1 ==sizeof(char) <= sizeof(short) <= sizeof(int) <= sizeof(long)
1 <= sizeof(bool) <= sizeof(long)
sizeof(char) <= sizeof(wchar_t) <= sizeof(long)
sizeof(float) <= sizeof(double) <= sizeof(long double)
sizeof(T) == sizeof(signed T) == sizeof(unsigned T)
inoltre
char deve essere almeno 8 bit
short deve essere almeno 16 bit
long almeno 32 bit
Questo vale anche in C99 o c'e' un'altra legge?
Grazie e ancora buon anno!
--
Gerolamo

 Questo vale anche in C99 o c'e' un'altra legge?
valgono anche per il C99. Ma dato che non no nessun documento 
ufficiale, non prenderla come oro colato.
ciao Anto
-- 
Antonio Cuni, 19 anni, studente
Brainbench C++ Master: 4.6, higher than 98% of all previous test takers.
C Language: 3.32, higher than 79% of all previous test takers.
Guida C/C++ di Programmazione.it: 
http://cpp.programmazione.it

 ufficiale, non prenderla come oro colato.
Ok
Grazie
--
Gerolamo

Confermo, il paragrafo e` il 5.2.4.2.1
ciao
Kronos
-- 
Home: 
http://kronoz.cjb.net
La vasca da bagno fu inventata nel 1850, il telefono nel 1875.
Se fossi vissuto nel 1850, avrei potuto restare in vasca per 25 anni
senza sentir squillare il telefono

 Confermo, il paragrafo e` il 5.2.4.2.1
Perfetto.
Grazie mille!
--
Gerolamo

Newsgroup: it.comp.lang.c
Titolo: Figlio attende il padre

Salve,
programmando sotto Linux io devo creare un processo figlio tramite una fork e tramite una exec nel
figlio caricare un altro programma, dal Padre dovrei lanciare una subroutine dopo che il figlio
esegua la exec ma prima che il figlio muoia!
C'č qualcuno che puň aiutarmi??
Grazie in anticipo

 C'č qualcuno che puņ aiutarmi??
HTH
C:\>iao Angelo
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 Grazie in anticipo
Niente
-- 
...e che vuoi di piu' dalla vita??

 
Temo che tu debba rivedere un po' le cose, perché una volta eseguita la 
exec, perdi il controllo del figlio, soprattutto se non sei tu ad aver 
sotto controllo il codice che vai a sostituire con questa. C'č poi da 
inserire un ulteriore problema: non puoi controllare quale sia il processo 
che va in esecuzione.
Se invece puoi modificare il codice che vai a sostituire con la exec, 
utilizza i segnali.
Spero di esserti stato di aiuto.
Ciao.
ValerioZ
Newsgroup: it.comp.lang.c
Titolo: problema con un programma

dunque dovrei scrivere un programma che legga da input 8 stringhe di
caratteri e calcoli la media delle lunghezze delle stringhe dispari.
per iniziare ho buttato giù queste righe di codice:
#include <stdio.h>
#include <string.h>
main(){
char c, word[20];
int i , j = 0;
int lung[7];
for (i=0; i<8; i++) {
printf("Inserisci la %d° stringa\n", i+1);
while ((c=getchar())!= '\n')
word[j++]=c;
word[j]='\0';
lung[i]= strlen(word);
 }
return 0;
}
pensavo che in lung[0] ci andasse la lunghezza della prima parola poi viene
incrementata "i" e in lung[1] ci andasse la lunghezza della seconda parola;
invece ci va la lunghezza della prima + quella della seconda. Non riesco a
capire il perchè.
se qualcuno riuscisse a spiegarmelo e a suggerirmi un metodo alternativo...
grazie come al solito :)

 ha scritto nel messaggio
news:E6oIb.23911$VW.11...@news3.tin.it...

Come programma alternativo ho partorito questo:
#include <stdio.h>
#include <string.h>
main(){
char word[20];
int i, int lung[7], int sommadis;
float mediadis;
for (i=0; i<8; i++) {
printf("Inserisci la %d° stringa\n", i+1);
gets(word);
lung[i]= strlen(word);
}
sommadis = lung[0] + lung[2] + lung[4] + lung[6];
mediadis= (float) sommadis/4.0;
printf("\nLa media delle lunghezze delle stringhe dispari è %.3f",
mediadis);
return 0;
}
questo funge ;)
cmq non sono ancora riuscito a capire perchè quello di prima non funge...
bho!
cmq grazie :)

 }
Con la correzione che ti ho dato, non ha piu' il problema di prima. Per 
consigli di stile, vedi l'altro messaggio (detto per inciso, e' meglio 
usare la gets/fgets per leggere righe!!)
-- 
/**
  * Mattia Belletti - Undergraduate student @ 
cs.unibo.it
  * ICQ: 33292311   - email: 
mbel...@cs.unibo.it
  * IRC: BluShine   - site(s): 
http://cs.unibo.it/~mbellett
  * Linux registered user 299762 @ Linux registered machine 213003
  */

 gets(word);
Usa fgets, cosi' puoi controllare i bound di dimensione dell'input. E' 
sempre meglio quando si fanno programmini, ma diventa essenziale quando 
vuoi fare programmi seri ;D
fgets(word, 20, stdin);
word[strlen(word)-1]='\0';
(la seconda riga serve perche' la fgets, al contrario della gets, salva 
anche il \n finale)
Questi sono solo suggerimenti per un codice migliore, ovviamente :)


   */
grazie dei consigli :)

Newsgroup: it.comp.lang.c
Titolo: [Linker error] undefined reference to `fcloseall'

ciao a tutti
volevo utilizzare fcloseall() per chiudere tutti gli eventuali stream 
aperti...
utilizzo Dev-C++ e programmo su windows
ma ottengo   [Linker error] undefined reference to `fcloseall'
mentre le altre funzioni sui file funzionano normalmente.


In effetti fcloseall non e' una funzione della libreria standard.
O devi aggiungere una libreria apposita al link oppure devi
vedere se c'e' una funzione della libreria del gcc (forse _fcloseall)
al momento non posso verificare quindi non posso dirti di piu.
Se posso permettermi... non dovresti mai aver bisogno di usare una
funzione del genere, vuol dire che non stai tenendo sotto
controllo quello che sta facendo il tuo programma! ;)
ciao
Giacomo
Newsgroup: it.comp.lang.c
Titolo: STAT() su di un file

 dati
Su Linux prova a vedere
$ man 2 stat
$ info libc 'File Sys' 'File Attr' 'Attr'
Ciao ciao,
Andrea
-- 
"...Unix, MS-DOS, and Windows NT (also known as the Good, the Bad, and 
 the Ugly)."
(by Matt Welsh)

dopo aver chiamato stat su un file non riesco a capire come utilizzare i
dati
memorizzati nella sua struttura (struct stat ss appunto) .
La struttura contiene dei tipi a me sconosciuti .
    st_dev,st_ino,st_uid,st_gid,st_rdev,st_ctime,st_atime,st_mtime
    non so come trattarli e non capisco il loro significato ...
Stesso problema con i tipi come time_t definiti in
    time.h .
C'e' qualcuno che mi possa aiutare ?
Grazie 1000 e ciao a tutta il nwg

Newsgroup: it.comp.lang.c
Titolo: Problema con i puntatori

Ciao a tutti, rieccomi che vi scrivo per un nuovo problema in cui mi
sono imbattuto nello studio del C.
Il libro mi propone il seguente codice:
/*Fig.7.4   fig07_04.c
 Usare gli operatori & e * */
#include<stdio.h>
int main(){
    int a;	    /*a è un intero*/
    int aPtr;	/*aPtr è un puntatore a un intero*/
    a=7;
    aPtr=&a;	/*aPtr è impostato con l'indirizzo di a*/
    printf("The address of a is %p\n"
		"The value of aPrt is %p\n\n", &a, aPtr);
    printf("The value of a is %d\n"
		"The value of a *aPtr is %p\n\n", a, *aPtr  );
    printf("Proving that * and & are complements of"
		"each other.\n&*aPtr=%p\n*&aPtr=%p\n", &*aPtr, *&aPtr);
    return 0;
}
Quando vado a fare la compilazione mi da il seguente messaggio di
errore:
blacknet86@SGC:~/Documenti/Uni/Lab2$ gcc fig07_04.c -o fig07_04
fig07_04.c: In function ‘main’:
fig07_04.c:10: warning: assignment makes integer from pointer without
a cast
fig07_04.c:16: error: invalid type argument of ‘unary *’
fig07_04.c:19: error: invalid type argument of ‘unary *’
blacknet86@SGC:~/Documenti/Uni/Lab2$
Il Warning sono riuscito a risolverlo usando la seguente istruzione:
aPtr=(int)&a;
Pultroppo non riesco a risolvere i seguenti due errori. Potete darmi
una mano?

   int aPtr;        /*aPtr è un puntatore a un intero*/
   int*  aPtr;       
M


Grazie tante


i puntatori sono sempre dichiarati mettendo l' asterisco sulla
sinistra della variabile, quindi se l' esercizio ti diceva:
    int aPtr;   /*aPtr è un puntatore a un intero*/
aPtr è un puntatore, come fa ad esserlo se non viene dichiarato ?
poi:
    aPtr=&a;        /*aPtr è impostato con l'indirizzo di a*/
in aPtr come fa ad andarci l' indirizzio della variabile a, se aPtr
non è un puntatore :)
penso che era solo questo l' errore, l' altro come fa a sbagliare un
libro ? .-.
dobbiamo pensare ad un errore di stampa o la dimenticanza dello stesso
autore :D
ciauz

Newsgroup: it.comp.lang.c
Titolo: problema

Qualcuno puo aiutarmi a capire perche' gli esempi del
K&R non funzionano .
da pag 51 in poi (es. atoi lower reverse etc )
forse devo interpretarli diversamente ?

spider wrote:

Per favore, ci spiegheresti qual e` il problema che incontri? E` 
probabile che sia dovuto a tipicita` della tua piattaforma, per cui la 
diagnosi non puo` prescindere da questo tipo di informazioni.
-- 
Baci,
Mony
Newsgroup: it.comp.lang.c
Titolo: stringe in c

salve sono nuovo del c e avrei due domande da fare
1) ho un confronto tra stringhe
if ( a == b )
       ecc,ecc
e vorrei ke non fosse Key sensitive
cioč ora se a= "ciao" e b= "Ciao" non entra nell if, io vorrei ke
invece ci entrasse lo stesso
2) č possibile estrarre i primi n caratteri da una stringa?
mi servirebbe una funzione che estra i primi n caratteri da una
stringa, cč gia una funzione di questo tipo o bisogna farsela? se si
come?
ciao e grazie

 come?
Probabilmente cio` che cerchi e` strncat(), sempre in <string.h>. Puoi 
usare anche strncpy() ma devi aggiungere poi a mano il terminatore '\0'.
-- 
Enrico 'Trippo' Porreca

o tolower() di <ctype.h>).
Su linux in string.h c'e' anche strcasecmp.
 

> Su linux in string.h c'e' anche strcasecmp.
ma string.h non è una libreria ANSI ??
le istruzioni non dovrebbero essere sempre le stesse??


strcasecmp() non e` una funzione standard, ma un'implementazione e` 
libera di fornire estensioni (anche all'interno di header standard).
-- 
Enrico 'Trippo' Porreca

 libera di fornire estensioni (anche all'interno di header standard).
a, tenks!
Newsgroup: it.comp.lang.c
Titolo: estrarre BIT da det. posizione

ciao a tutti
devo scrivermi una funzione per estrarre un bit da una specificata posizione
in un intero 8 bit
qualcosa del genere:
BOOL GetBit( int byte, int position );
avrei pensato di usare gli operatori di shift di bit a sinistra e a destra,
di usarli tante volte quanto serve per riempire sia a destra che a sinistra
di zeri, e poi sempre con lo shift mandare il bit interessato alla prima
posizione, e poi controllare se l'intero è 1 restituire TRUE, altrimenti
sono tutti i bit a zero e restituisce FALSE
senza che sto a impazzire incontrando eventuali problemi, esiste qualcosa
già fatta?
se no, il metodo che uso va bene o c'è qualcosa di meglio?
--
ciao
..::[xaero]::..

BOOL GetBit( unsigned char byte, unsigned position )
{
     return (BOOL)( byte and ( 1 << position ) ) ;
}
-- 
Andrea Laforgia (ICQ# 87230455) ---------------------------
Non scrivetemi in privato, se non richiesto espressamente.
No replies in private e-mail, unless explicitly requested.
----------------------------------------------------------

e per impostare un bit a una detereminata posizione senza toccare gli altri?
se (1 | 1) fa 1, e (1 | 0) fa 1 si potrebbe fare:
const int bits[] = {0, 1, 2, 4, 8, 16, 32, 64, 128};
e fare:
void SetBit( unsigned char *byte, unsigned position, BOOL value)
{
    if (value)
        *byte = *byte | bits[position];
    else
        //   ???
}
non conosco tutti gli operatori di bit...  :(((
conosco solo >>, <<, |, &...
sarebbe la buona occasione per avere una delucidazione
magari indicarmi un qualcosa che ne parli approfonditamente
--
ciao
..::[xaero]::..
