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

Sapete dirmi dove posso trovare il codice di un'applicazione client/server
FTP (anche molto semplificata) scritta in C?


-- 
Debugging is twice as hard as writing the code in the first place.
Therefore, if you write the code as cleverly as possible, you are,
by definition, not smart enough to debug it.
    - Brian W. Kernighan

 
prova qui
http://vsftpd.beasts.org/
da qui mi pare si possa scaricare il sorgente
di vsftp
ftp://vsftpd.beasts.org/users/cevans/
ciao

 FTP (anche molto semplificata) scritta in C?
Anch'io sto cercando la stessa cosa. Chi la trova prima posta l'indirizzo.
Saluti

Newsgroup: it.comp.lang.c
Titolo: Dove trovare Documentazione ?

Salve a tutti,
assuefatto alla documentazione di Java e C# mi chiedevo se esistesse
una qualche documentazione simile per le librerie standard del C, quanto
meno quelle di sistema e quelle "accessorie" come Math.
in genere consulto la documentazione delle glibc, ma ha più
la forma di un tomo biblico, pesante e denso, che di una documentazione
da consultare velocemente per avere un'idea di "chi fa cosa"
grazie mille

 meno quelle di sistema e quelle "accessorie" come Math.
Io uso:
http://cppreference.com/
http://www.cplusplus.com/reference/
Anche se c'è scritto C++, si trovano info pratiche per il C.
Saluti.

 Saluti.
grazie mille... bisognerà poi andare a pescare quelle funzioni
nelle librerie c e non cpp, ma è comunque un ottimo punto
di partenza... :)

 librerie c e non cpp, ma è comunque un ottimo punto di partenza... :)
Questa è la documentazione: sintassi, tipi restituiti, scopo delle 
funzioni... Poi si tratta di scrivere il codice.
Saluti

 
http://www.unix.org/single_unix_specification/
Contiene anche lo standard C99.
Manlio Perillo

Newsgroup: it.comp.lang.c
Titolo: compilatore c cercasi...

ciao, sto iniziando a studiare il c e vorrei sapere dove posso scaricare a
gratis un buon compilatore...
...grazie
              Christian.

 ha scritto nel messaggio
news:aim5an$jek$1...@lacerta.tiscalinet.it...


 ha scritto nel messaggio
news:ajbngn$5lq$1...@lacerta.tiscalinet.it...

Newsgroup: it.comp.lang.c
Titolo: C corso completo di programmazione H.M.Deitel, P.J. Deitel

Sono un novellino e dal libro di cui ho citato il titolo ho copiato il
seguente codice:/* programma di addizione*/
#include <stdio.h>
int main()
{
    int integer1;
    int integer2;
    int sum;
    printf("Enter first integer\n");
    scanf("%d" , &integer1);
    printf("Enter second integer\n");
    scanf("%d" , &integer2);
    sum = integer1 + integer2;
    printf("Sum is %d\n" , sum);
    return 0;
}
e fin qui tutto bene solo che cercando di eseguirlo riesco a inserire
i valori degli addendi senza poter visualizzare il risultato
dell'operazione. Cercando un po' su google ho capito che il codice
andava modificato nel seguente modo:
/* programma di addizione*/
#include <stdio.h>
#include<stdlib.h>
int main()
{
    int integer1;
    int integer2;
    int sum;
    printf("Enter first integer\n");
    scanf("%d" , &integer1);
    printf("Enter second integer\n");
    scanf("%d" , &integer2);
    sum = integer1 + integer2;
    printf("Sum is %d\n" , sum);
    system("PAUSE");
    return 0;
}
e cosi facendo si riesce a visualizzare il risultato.
il mio dubbio è: qual'è il motivo che rende indispensabile (se è
indispensabile) l'aggiunta di questo codice
[...#include<stdlib.h> ...system("PAUSE");...] ?
Se esiste un altro modo per ottenere lo stesso risultato fatemelo
sapere perché son curioso e non sono riuscito a trovarlo soprattutto.
Grazie e scusatemi per la lunghezza.

e cosi facendo si riesce a visualizzare il risultato.
il mio dubbio è: qual'è il motivo che rende indispensabile (se è
indispensabile) l'aggiunta di questo codice
[...#include<stdlib.h> ...system("PAUSE");...] ?
Se esiste un altro modo per ottenere lo stesso risultato fatemelo
sapere perché son curioso e non sono riuscito a trovarlo soprattutto.
Grazie e scusatemi per la lunghezza.
-------------------------------------------------------------------------
Io eseguo il programma direttamente da shell (o prompt se usi win) credo sia 
piu' comodo ed eviti di aggiungere codice "inutile" al tuo programma. :)

bio....@gmail.com
 wrote:
[zacked]
Il motivo è che -se apri il programma in console dal compilatore-,
quando termina, la finestra della console si chiude, e perciò non vedi
mai il risultato. system(PAUSE) è un modo per dire a Windows (in
genere si tratta di questo) "aspetta fino a che io prema un tasto
prima di chiudere la console". Ora, la funzione system e la costante
PAUSE sono dichiarate in quel file .h, quindi devi includerlo.
Un'alternativa è aprire il programma da una console apposta come ti
hanno detto, così non devi aggiungere niente.
Un'altra è aggiungere alla fine del programma una chiamata a fscan o
fgets, per prendere un carattere da input e non farci niente, così il
programma "aspetta" prima di chiudersi. In questo senso, però,
system(PAUSE) è più pulita.
Saludos
Adriano

 wrote:

Grazie adesso ho capito; proverò ad avviarlo dalla shell finora non
l'ho ancora fatto
Newsgroup: it.comp.lang.c
Titolo: Microsoft Visual ... cosa acquistare ?

Nella ditta dove lavoro dovremmo acquistare un compilatore C/C++ della 
Microsoft. Da quanto ho potuto vedere, attualmente sulla "piazza" ci 
sono 2 compilatori della Microsoft che potrebbero essere interessanti 
per noi:
(1) Microsoft Visual C++ .NET Standard 2003 Edition
(2) Microsoft Visual C# .NET Standard 2003 Edition
I costi di questi 2 prodotti non sono nemmeno molto elevati :)
Io, personalmente, scarterei quello per C#, non perche' sia male, ma 
perche' il C# richiede conoscenze e competenze che attualmente non 
possiedo (pur conoscendo un pochino alcune basi/nozioni di C#).
Rimane il primo. Io conosco (perche' l'ho usato in passato) il VC++ 5.0
e vorrei sapere se con il Visual C++ .NET si puo' ancora:
(a) Compilare programmi "C" che utilizzano esclusivamente il Windows SDK 
(le api Win32).
(b) Se viene ancora fornito il "Platform SDK" allineato/aggiornato agli 
ultimi O.S. Microsoft.
(c) Se esiste ancora il "resource editor" per creare risorse, icone, 
dialog-box, ecc...
Se qualcuno puo' darmi qualche risposta, sarei grato.
Ciao.
Andrea

 Microsoft. 
Ciao,
questo gruppo si occupa solo di C standard.
Per avere risposte esaurienti ti devi rivolgere al gruppo
specifico di programmazione sotto windows, come
it.comp.programmare.win32
ciao,
g.

 Ciao.
- puoi ancora compilare programmi in C89 (non supporta il C99 ma pochi lo
usano ancora).
- puoi ancora programmare usando le windows SDK (API)
- esistono due versioni di .NET, la 2002 e la 2003. Il Visual C++.NET e' uno
dei compilatori C++ piu' aderenti allo standard C++.
- la nuova versione di visual studio e' incredibilmente migliore rispetto
alla 5.
- si, ovviamente c'e' ancora il resource editor!
Di piu' non posso dirti in quanto sei abbastanza OT.
Se ha altre domande non farle qua... posta su un altro NG.
Tommy

 ha scritto nel messaggio
news:c1ho62$ees$1...@newsreader.mailgate.org...

---
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: core dump

Ciao a tutti,
   qualcuno sa come fare scrivere, l'eventuale core, in un directory diversa
   da quella di esecuzione?
Grazie
Frank



Non ci metterei la mano sul fuoco, ma chedo che devi usare
"../dir1/dir2/"  (i punti iniziali insomma)
Ciao.

 wrote in message
news:l5gh6vob13gaqp23e...@4ax.com...

Newsgroup: it.comp.lang.c
Titolo: Cod.operativo?

Qualcuno sa darmi una definizione piuttosto rigorosa su cosa sia un codice
operativo?
Soprattutto che differenza c'è tra istruzione e cod.operativo?
Grazie per l'aiuto
bazz...@hotmail.com

Entro nella stanza e...cosa ti vedo ? sette lettini.
Su uno di essi c'era scritto Bazzecola :
#Qualcuno sa darmi una definizione piuttosto rigorosa su cosa sia un codice
#operativo?
#Soprattutto che differenza c'è tra istruzione e cod.operativo?
E' una domanda abbastanza strana ed off-topic.
L'istruzione e' un istruzione, ovvero un comando per il processore, il
codice operativo e' il codice binario associato all'istruzione.
Andrea Laforgia        (
andrea_...@bigfoot.com
)
----------------------------------------------------
There is nothing better for understanding a kangaroo
than seeing it jump.
----------------------------------------------------

Soprattutto che differenza c'è tra istruzione e cod.operativo?
Do per scontato che tu ti stia riferendo sempre all'assembler (OT - OT -
OT - OT):
Una istruzione assembler è divisibile in due parti opcode (codice operativo)
e operands (operandi). L'opcode rappresenta l' "azione" che la CPU dovrà
svolgere mentre gli operands sono gli argomenti dell'opcode, cioè gli
elementi (memoria, numeri, registri) che dovrà andare a manipolare.
Una istruzione è formata da un opcode e da un numero variabile di operands.
Esempio di istruzione:
mov ax, 13h
    |     ^----^-- operands
   +------------ opcode
Spero di aver dissipato i tuoi dubbi
Ciao, Giuseppe

you wrote :
#>Qualcuno sa darmi una definizione piuttosto rigorosa su cosa sia un codice
#>operativo?
#>Soprattutto che differenza c'è tra istruzione e cod.operativo?
#mov ax, 13h
#|   ^----^-- operands
#+------------ opcode
Comunque, bisogna dire, per la precisione che non sempre cio' che
appare a livello simbolico come operando e' poi in realta' un operando
dell'istruzione.
Mi spiego : un'istruzione del tipo mov ax, ... puo' essere tradotta
con un unico op-code e gestire come operando solo la costante numerica
13h.


13h.
Naturalmente la distinzione tra opcodes operands che fa il l'assemblatore è
diversa da quella che fa la CPU.
Grazie per l'accorgimento
Ciao, Giuseppe

13h.
Dipende.
Nei processori x86 l'opcode non e' necessariamente di 8 bit.
Ad esempio per l'istruzione mov da registro si ha (manuale Intel)
mov (immediate to register short form)  1011 w reg   immediate data
dove 1011 e' l'opcode, w e reg sono altri campi (w di 1 bit e reg di 3 bit)
che identificano larghezza del registro (8 o 16) e registro.
Marco

you wrote :
#Nei processori x86 l'opcode non e' necessariamente di 8 bit.
Lo so come sono organizzati gli op-code per gli x86, ma ricordo che si
sono istruzioni per le quali la specificazione del registro parametro
e' insita nell'opcode stesso.

Newsgroup: it.comp.lang.c
Titolo: Funzione che ritorna una stringa

Devo creare una funzione che, ricevuta come parametro una stringa,
restituisce un'altra stringa. Qualcuno sa dirmi la dichiarazione e
l'intestazione esatta???MEglio usare i puntatori o che altro??
Grazie a tutti
Yuri
--------------------------------
Inviato via 
http://usenet.libero.it

 Yuri

Luigi 'Comio' Mantellini wrote:

E' altamente sconsigliato, anche se non formalmente errato, creare funzioni
del secondo tipo, ovvero che allocano memoria che poi non viene sicuramente
liberata. Chiaramente per quanto riguarda una semplice stringa il rischio
non è certo quello di intasare il sistema, ma è una pratica da evitare.
Ti consiglio quindi di utilizzare il primo tipo di funzione consigliata da
Luigi.
Solo un ulteriore precisazione: se vuoi passare sia input che output nei
parametri è comodo restituire in uscita un codice di controllo di errore.
int foo(char *in, char *out) {
  ...
  if(tutto_bene){
    return 0;
  }
  else{
    return -1;
  }
}
Chiaramente -1 e 0 sono indicativi, puoi restituire quello che vuoi
nell'ambito del tuo programma, basta che tu sia coerente. Ricordati però
che l'uscita globale del programma (il return di int main() per intenderci)
deve essere 0 se tutto è filato liscio.
Se invece vuoi restituire una stringa fai come ha detto Luigi. In caso di
errore qui restituisci NULL.
Ciao
Leo
-----------------------
Leonardo Giordani

Newsgroup: it.comp.lang.c
Titolo: come si fa?

Io ho questo codice pascal:
Procedure XYAttr(X,Y,ATTR:BYTE);
Begin
  Mem[SegB800:(X+Y*80)*2+1]:=Attr
End;
come lo traduco in C?
---
Il Razziatore,
The Only Good Windows in an uninstalled Windows
-----------------------------------------------
E-MAIL: 
razzi...@usa.net
WEB   : 
razziatore.dsx.org
ICQ   : 67552596

---
Se usi il Borland 16 bit forse cosi funziona ........... ma non
garantisco .
void pokeb(unsigned segment, unsigned offset, char value)
{
        _ES = segment;
        * (char _es *) offset = value;
}

 ha scritto nel messaggio
news:3a904c71.12057254@pws...
: Io ho questo codice pascal:
:
: Procedure XYAttr(X,Y,ATTR:BYTE);
: Begin
:   Mem[SegB800:(X+Y*80)*2+1]:=Attr
: End;
:
: come lo traduco in C?
: ---
: Il Razziatore,
A memoria, per Bc31:
void XYAttr(unsigned char X, unsigned char Y, unsigned char ATTR)
{
  pokeb(SegB800,(X+Y*80)*2+1,ATTR);
}
susanna

Grazie!

Newsgroup: it.comp.lang.c
Titolo: Testo colorato


"...the night was heavy and the air was alive..."
http://www.poli.studenti.to.it/~s93146/

Volevo sapere se queste sono standard,
No, non sono standard (te lo dice anche l'help)
ciao

 a disposizione i sorgenti...
  No, non lo sono. Se il tuo programma funzionera` solo sotto MS DOS, ti
consiglio di cercare riferimenti sui terminali ANSI, supportati anche
dalle versioni Linux piu` moderne. 
	Alla prossima,
		Marco

No, non sono standard (te lo dice anche l'help)
e cosa potrei usare al loro posto?
ciao e grazie


 e cosa potrei usare al loro posto?
se intendi qualcosa di standard per ottenere il testo colorato, non ci
sono speranze...
--
 Ciao, Bianco.
 Reply to 
luca....@tiscalinet.it
Newsgroup: it.comp.lang.c
Titolo: disegnare funzioni matematiche

Salve a tutti, è la prima volta che posto in questo NG,
vi chiedo una cosa semplice semplice (spero):
come posso fare per disegnare su schermo semplici funzioni matematiche 2d?
Grazie a tutti

 come posso fare per disegnare su schermo semplici funzioni matematiche 2d?
La cosa piu' semplice e' usare un bel pennarello di quelli che
scrivono sul vetro.
Se invece vuoi usare il C, allora e' meglio che ti rivolgi al gruppo
che si occupa piu' specificatamente della piattaforma software sulla
quale programmi. Questo perche' il C in quanto tale non comprende
funzioni per disegnare sul video e di solito le librerie per farlo
dipendono dal sistema operativo o dal compilatore etc.etc.
ciao,
g.

 dipendono dal sistema operativo o dal compilatore etc.etc.
Si hai pienamente ragione è vero... ho cercato qualche gruppo
"specializzato" su Borland C++ 5 sotto dos o qualcosa di simile, ma
niente... per questo motivo ho pensato che questo fosse il NG più adatto...
chiedo scusa se ho sbagliato NG, e vi chiedo se potete per favore
indirizzarmi nel NG giusto
(ho scritto di indirizzarmi al NG giusto e non nel luogo giusto perchè
altrimenti qualcuno mi avrebbe mandato "a quel paese" :-))
Ciao
Gnagno

 indirizzarmi nel NG giusto
se sviluppi sotto linux: 	it.comp.os.linux.development
se sviluppi sotto windows:	it.comp.programmare.win32 
ciao,
-- 
+--------+ ASCII ribbon campaign ( )
|  kral  |  - against HTML email  X 
+--------+              & vCards / \

 niente... per questo motivo ho pensato che questo fosse il NG piů adatto...
I gruppi specializzati sul borland ci sono:
collegandosi al server news  
newsgroups.borland.com
li vedi tutti. La lingua preferenziale e' l'inglese,
ma visto che fai l'universita' questo non dovrebbe essere
un problema.
In ogni caso ti suggerisco (avendolo usato io stesso
nelle mie incursioni sotto windows) di procurarti un manuale
e/o analizzare attentamente tutti i vari programmi di esempio
forniti col Borland 5. E' difficile spiegare tutta la grafica
in una paginetta....
ciao,
g.

 un problema.
Grazie, ho cercato quello che trovavo :)
se a qualcuno interessasse approfondire la conoscenza della BGI (Borland
Graphics Library) posto il link nel quale ho trovato una lista esauriente
delle funzioni supportate:
http://www.cs.colorado.edu/~main/bgi/doc/index.html
ciao a tutti
Newsgroup: it.comp.lang.c
Titolo: Matrice dinamica

Ciao, ho letto un post su come allocare una matrice dinamica, fin qui tutto
OK, ma e' buona norma disallocare. Come posso fare ? Grazioe. 
Alessio
--
Posted from 
sfw.lib.disco.unimib.it
 [149.132.196.251]
via Mailgate.ORG Server - 
http://www.mailgate.org

Nella FAQ (vedi firma) è spiegato anche come deallocarla.
--
Marco Iannaccone
marc...@tin.it
Nick: Tolkien
ICQ UIN: 18748121
"Questa è una nave moderna, ma ha un nome antico e glorioso...
Trattala come una signora e ti riporterà sempre a casa"
FAQ di it.comp.lang.c:
http://www.programmazione.it/linguaggi/c/itcomplangc.htm

OK, ma e' buona norma disallocare. Come posso fare ? Grazioe. 
char **mat ;
... /* allocazione */
for ( i = 0 ; i < N_RIGHE ; i++ )
{
    free( mat[i] ) ;
}
free( mat ) ;
--
Andrea Laforgia (
andrea_...@bigfoot.com
)
---------------------------------------------

In pratica deallochi prima le singole righe, poi l' array di puntatori

Newsgroup: it.comp.lang.c
Titolo: Variabili locali

Ciao a tutti,
mi spiegate in che cosa differiscono le variabili a e b e c - per quanto
riguarda l'inizializzazione -:
int a = 10;
void func(void)
     {
      int b = 20;
      static int c = 30;
      }
Seguendo ciò che fa il compilatore tramite le fasi di debug allo startup
viene inizializzata "a" al momento della sua definizione. Quando chiamo la
funzione func prima "b" viene definita - e contiene un valore
indeterminato - ed entrando nella funzione ad essa viene assegnato un
valore. Medesimo procedimento viene effettuato per c.
Compilatore TC 2.00
Ringrazio tutti anticipatamente  in quanto sicuramente saprete risolvere
questa mia grave lacuna sulla conoscenza del compilatore e del rispettivo
linguaggio.

       }
a e' una variabile globale per il pezzo di codice che mostri ossia e' nota
fuori e dentro la funzione e vale 10
b e' una variabile locale alla funzione, inizializzata a 20 e cessa di
esistere al termine della esecuzione della funzione
c e' una variabile locale il cui valore 30 viene conservato anche al termine
della esecuzione della funzione, ossia richiamando una altra volta la
funzione c inizialmente vale 30.

 esistere al termine della esecuzione della funzione
D'accordo, pero rimane il problema che prima b mi viene definita sullo stack
con un valore casuale e solo successivamente - quando mi esegue int b = 20 -
mi setta la locazione con valore pari a 20, ed è proprio questo quello che
non mi torna in quanto l'inizializzazione viene fatta in fase di definizione
della variabile.
Ciao.

della variabile.
Quando chiami una funzione viene riservato spazio sullo stack per le
variabili locali, questo significa in pratica dire che la tua
variabile b corrisponte alla locazione di memoria X (e da li in poi
sara' riservato abbastanza spazio per contenere la variabile b).
Dopo che hai riservato questo spazio (che al momento conterra'
generalmente quello che c'era prima in quella porzione di memoria) si
provvede alle inizializzazioni del caso (se previste espressamente),
che nel caso da te riportato avverranno prima che sia eseguida ogni
altra istruzione della funzione chiamata, altrimenti nel preciso
istante in cui vai a inizializzare le variabili.
-- 
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."

 funzione c inizialmente vale 30.
Vero,  ma  la cosa  piu`  importante  e`  che,  benche` lo  scope  della
variabile sia la funzione func, essa  sopravvive per tutta la durata del
programma  (e`  statica,  appunto). Normalmente  non  e`  corretto  fare
riferimenti ad  una variabile locale  ad una funzione  all'esterno della
stessa:
/* Sbagliato */
int *foo(void) {
        int bar;
        return &bar;
}
Con una variabile locale statica, invece, e` lecito:
/* OK */
int *foo(void) {
        static int bar;
        return &bar;
}
Nota anche che una  variabile static viene automaticamente inizializzata
a 0 (se non specificato diversamente).
ciao
Kronos
-- 
Home: 
http://kronoz.cjb.net
Not an editor command: Wq
Newsgroup: it.comp.lang.c
Titolo: ancora sul linking

Mi era sembrato di capire che quando compilo un programma in c, i file 
.o che contengono il codice oggetto delle funzioni di libreria da me 
utilizzate vengono linkati in modo statico al mio eseguibile. Pero' 
disassemblando il mio eseguibile vedo vari riferimenti a msvcrt.dll e 
kernel32.dll. Cosa significa? Non doveva essere tutto incluso nel mio 
eseguibile? Oppure il codice linkato fa a sua volta riferimento a del 
codice contenuto in queste dll?

 codice contenuto in queste dll?
Se scrivi applicazioni che utilizzano API del sistema operativo, vengono
implicitamente aggiunti al codice i riferimenti per l'aggancio dinamico
delle librerie del sistema operativo (vedi kernel32.dll).  In aggiunta, se
compili utilizzando un certo compilatore (vedi Visual Studio) è possibile
che vengano aggiunti anche i riferimenti per l'aggancio di librerie
distribuite con il compilatore (che dovrai aver cura di portarti dietro,
quando installerai il codice dal cliente).
-- 
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: Come controllare se un processo è pallato????

Grazie a chiunque mi possa suggerire o indicare come risolvere questo mio 
semplice problema.
Premetto che sto iniziando a scoprire l'ambiente Visual C legato a windows 
solo adesso ma conosco sia C che C++.
Il problema che ho è questo.
Io ho un programma che ogni tanto si pianta, è un bug conosciuto al quale la 
casa editrice non ha ancora posto rimedio.
Dovendo, questa applicazione, essere sempre attiva, sto cercando di rilevare 
se l'applicazione è in loop dal fatto che in quei momenti occupa i 99% della 
CPU.
Il mio quesito è quindi dove posso recuperare la percentuale di utilizzo di 
un processo in un dato momento, tipo quella del Task manager di NT?
______________________________________________________
Get Your Private, Free Email at 
http://www.hotmail.com
--
Posted from [212.41.195.110] by way of 
law-f310.hotmail.com
 [209.185.131.14]
via Mailgate.ORG Server - 
http://www.mailgate.org

 un processo in un dato momento, tipo quella del Task manager di NT?
In alcune chiavi fittizie del registry, sotto DYNAMIC_DATA o qualcosa di
simile. Non so dirti di più.
--
Alessandro Monti
Newsgroup: it.comp.lang.c
Titolo: una strana duplicazione

Salve a tutti.Sto muovendo i miei primi passi nel mondo C,ed avrei
unproblemino con un programma,dovrebbe essere una specie di disassemblatore
e funziona trane per un particolare:nel file di output mi ripete DUE volte
l'ultimo byte letto,ad esempio:
nel file di input ho la stringa
antonio
nell'output mi aspeterei
 61 6e 74 6f 6e 69 6f
invece ho
61 6e 74 6f 6e 69 6f 6f
premetto che compilo il sorgente con il turbo C 2.01
qualcuno mi sa dire dov'è l'errore:
#include <stdio.h>
#include <string.h>
#define COLUMNS 15
main(int argc,char *argv[])
{
FILE *pt,*pt_h;
unsigned char ch;
register int i=0;
if(argc!=3)
 {
  puts("usage: hexedit <path filename> <path nameresult>");
  exit(1);
 }
if(!strcmp(argv[1],argv[2]))
 {
  puts("error:<path filename> and <path result> coincide");
  exit(1);
 }
if(((pt=fopen(argv[1],"rb"))==NULL)||((pt_h=fopen(argv[2],"w"))==NULL))
 {
  puts("error:impossible to open file");
  exit(1);
 }
while(!feof(pt))
 {
  fread(&ch,1,1,pt);
  fprintf(pt_h,"%x ",ch);
  i++;
  if(i==COLUMNS)
   {
    putc('\n',pt_h);
    i=0;
   }
 }
fclose(pt);
fclose(pt_h);
} 
grazie Antonio

l'ultimo byte letto,ad esempio:
...
C'e' stato recentemente un post simile. feof() non restituisce vero
quando ci si trova alla fine del file ma quando l'ultima operazione di
lettura ha incontrato la fine file (non e' la stessa cosa).
Leggendo ad esempio un solo carattere da un file di un carattere
non si incontra la fine file... questa si incontra alla lettura
successiva (e fread torna 0).
Nel tuo programma dovresti usare qualcosa come:
   while(fread(&ch,1,1,pt)==1)
   {
     /* Lettura riuscita: scrivi in esadecimale */
     fprintf(pt_h,"%x ",ch);
     ...
   }
HTH
Andrea
--
Andrea Griffini, Programmer
http://www.netservers.com/~agriff

 }
La condizione di EOF viene rilevata da fread() quindi il tuo ciclo di stampa
viene eseguito una volta di troppo.
Dato che fread() ritorna zero in caso di errore o eof puoi cambiare in:
while(fread(&ch,1,1,pt)) {
 fprintf(pt_h,"%x ",ch);
 ........
 ........
}
if (ferror(pt))
  { /* gestione eventuali errori input */ }
Aggiungi anche <stdlib.h> alla lista degli include per la funzione exit()
Buon Anno
gfb
Newsgroup: it.comp.lang.c
Titolo: case o if

E' più veloce il case o l' if ?
                                        Alex

 E' piů veloce il case o l' if ?
Non dovrebbe esserci alcuna differenza.
EMG

Non dovrebbe esserci alcuna differenza.
Forse il case e' piu' ottimizzato.
Anche se a vedere il codice non si direbbe.
Marco

E' più veloce il case o l' if ?
Personalmente sceglierei quello che si legge meglio, comunque puo' accadere 
che il "case" venga ottimizzato con una "jump table", specialmente per valori 
consecutivi o quasi. Per esempio un case di questo tipo:
switch( index ) {
case 1: ...
case 2: ...
case 3: ...
case 4: ...
case 5: ...
puo' essere ottimizzato utilizzando una tabella che contiene gli indirizzi 
delle label per le varie entrate ed utilizzando poi un goto jump_table[index] 
per saltare direttamente all'entrata giusta. Se anche ci fosse un "buco", per 
es. tra 5 e 7, il compilatore puo' utilizzare lo stesso approccio inserendo un 
opportuno indirizzo (default o equivalente) per l'entrata mancante. E' sempre 
difficile dire quando scatta questo tipo di ottimizzazione che dipende anche 
dal numero di valori e da altro. Ovviamente con valori tipo 1, 13, 74, 101, 
ecc. il compilatore tradurra' lo switch in una serie di if perche' altrimenti 
ci sarebbero troppi "buchi" nella tabella con conseguente spreco di memoria.
Newsgroup: it.comp.lang.c
Titolo: REQ: HELP. Semplici programmini cercasi!!!

Help!!! Materiale per un esame.
Definire in C i seguenti programmi:
PARTE PRIMA
1) Un programma che gestisce stringhe: lettura, scrittura, ordinamento
2) Un programma che usa le istruzioni bit a bit
3) Un programma che usa i puntatori
4) Un programma che usa strutture ricorsive
PARTE SECONDA
Definire in C++ un programma che usa il costrutto template



Se non sai scrivere questi programmi, ti suggerisco di lasciare la
scuola che stai facendo (o non facendo, se preferisci).
-- 
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: realloc

Salve a tutti,
per aumentare le dimensioni di un vettore uso realloc, è giusta questa
sintassi?
float dati[100];
dati = realloc (dati, n*sizeof (float));
in fase di compilazione mi da errore e non so se un vettore può essere
trattato in questo modo con realloc.
Grazie in anticipo
daniele

 trattato in questo modo con realloc.
No, non e` giusta. 'dati' e` un array la cui memoria e` allocata
staticamente.
La realloc() ha invece bisogno di un puntatore che punti ad una
porzione di memoria riservata con la malloc().
Devi fare:
   float * dati;
   dati = malloc(100 * sizeof(float));
   dati = realloc(dati, n * sizeof(float));
Controlla anche la definizione precisa della realloc() nell'ambiente
che usi: qualora la riallocazione dovesse fallire, lo standard non
descrive cosa succede alla vecchia memoria. Potrebbe non succedere
nulla (Linux, per esempio, garantisce che non sia toccata) oppure
potrebbe essere modificata. Tutto dipende dall'implementazione, quindi
ti consiglio vivamente di verificare.
Saluti,
Marco

 descrive cosa succede alla vecchia memoria.
Non e` esatto. Lo standard dice che in caso di fallimento realloc()
restituisce NULL e la vecchia area di memoria rimane inalterata.
Per questo solitamente (perlomeno io lo faccio) si struttura il codice
in questo modo:
p = realloc(dati, n * sizeof(float));
if (!p) {
        /* gestione dell'errore, i vecchi dati sono ancora accessibili
         * tramite la variabile /dati/.
         */
} else {
        dati = p;
}
In caso di fallimento si possono ancora usare i vecchi dati (ad esempio
per salvarli su disco e poi fare una free).
Luca
-- 
Home: 
http://kronoz.cjb.net
"La donna è coinvolta sessualmente in tutti gli affari della vita. A
 volte perfino nell'amore." -- K. Kraus

 [...]
Giustissimo, ho ricontrollato ed effettivamente e` cosi`.
Eppure ricordo di aver letto da qualche parte che il contenuto
della vecchia locazione non era garantito in caso di fallimento.
Non e` che questo comportamento (un po' bizarro tra l'altro)
sia previsto dallo standard Unix? Non ho lo standard sotto mano,
quindi non posso controllare, cmq vedro` di farlo.
Saluti,
Marco

Grazie di nuovo a tutti!
ciao
Newsgroup: it.comp.lang.c
Titolo: help

ragazzi mi serve un aiuto. io devo scrivere un programma che mi dia la
possibilita di scrivere su file ma ho un problema.
ora vi invio la parte di codice da me scritta e vi spiego qual'è il
problema.
#include <stdlib.h>
# include <stdio.h>
main ()
{
char a[50000] ;
FILE *pf;
pf = fopen ("dati.txt" , "w" ) ;
printf( " INSERISCI LE MODIFICHE DA APPORTARE: " ) ;
scanf("%s",&a) ;
fprintf(pf,"%s\t",a);
fclose( pf ) ;
system("pause");
}
quando eseguo questo programma mi fa scrivere sul file solo la prima
stringa di caratteri ad esempio
se io scrivo mario rossi il programma mi fa scrivere sul file solo
MARIO. perchè?
e poi quando premo invio per andare a capo mi compatre la scritta di
chiusura del programma d ivece io non lo voglio chiudere. mi potreste
aiutare ve ne sarei grato.
ciao a tutti

 MARIO. perchè?
Dalla documentazione di scanf: (esegui man scanf su unix, o l'MSDN su
Windows)
%s     Matches a sequence of non-white-space characters; the next
pointer must be a pointer to char, and the array must be large
           enough to accept all the sequence and the terminating NUL
character.  The input string stops at white space or at the maximum
           field width, whichever occurs first.
Quando scannerizzi con %s, scanf() si ferma al primo spazio (o prima,
se tu hai specificato una lunghezza per il tuo buffer, cosa altamente
raccomandabile se tu vuoi proprio usare scanf)
Lezione numero 1 in C:
Non usare comandi senza sapere esattamente cosa fanno. Il C non e'
come Python o altri dove puoi ignorare il manuale e in una qualche
maniera qualcosa esce, prima o poi. Programmare in C significa avere
il controllo di cio' che si sta facendo, sempre.

 
Una possibile soluzione: ma dovresti documentarti di piu' ;)
#include <stdlib.h>
#include <stdio.h>
#define LUNGH 5000
int main ()
{
    char a[LUNGH] ,
         b[] = "dati.txt";
    FILE *pf;
    pf = fopen (b , "w");
    if (pf == NULL)
        printf ("Errore apertura file: %s\n", b);
    else
    {
        printf( " INSERISCI LE MODIFICHE DA APPORTARE: " ) ;
        fgets (a, LUNGH - 1, stdin); /* stdin e' la tastiera */
        fprintf(pf,"%s\t",a);
        fclose( pf ) ;
    }
system("pause");
return 0;
}
Ti lascio come studio il problema di aggiungere alla fine della stringa
la eol.
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.6 (GNU/Linux)
Comment: Using GnuPG with Mozilla - 
http://enigmail.mozdev.org
iD8DBQFIq+EdMxbj9RlG484RAjJiAKCUve3xOCUuJPubGWv+AUEJRyf0cQCeNB9J
hwvyXpGr1CVgAdzo8OZQwrc=
=VABY
-----END PGP SIGNATURE-----

 scanf("%s",&a) ;
...
soluzione col minimo di modifiche:
scanf("%[^\n]",&a) ;
(cosě  viene letta la stringa fino a che non viene incontrato il 
carattere \n),
Giorgio
Newsgroup: it.comp.lang.c
Titolo: Chiarimenti

Qualcuno mi saprebbe dare qualche spunto su come convertire un algorimto
ricorsivo in un'altro non-ricorsivo equivalente? Grazie!

 ricorsivo in un'altro non-ricorsivo equivalente? Grazie!
Prima di tutto escludiamo il caso in cui ci sia un algoritmo diverso che ti
fa' ottenere lo stesso risultato in modo iterativo: parliamo solo di
trasformare un programma ricorsivo in iterativo.
La soluzione consiste nell'usare uno stack di appoggio per memorizzare le
informazioni.
Nello stack memorizzi le chiamate da effettuare (push dei parametri) e man
mano le esegui (dopo aver fatto una pop del parametro per la chiamata). 
<code>
void tree_visit_inorder(tree b2) {
    /*
     * tutto il sottoalbero sinistro, la radice, tutto il
     * sottoalbero destro 
     */
    stack S;
    node *current
    stack_push(S, bt->root);
    while (!stack_isempty(S)) {
        current = stack_pop(S);
        /* visita il nodo a sinistra */
        if (current->left != NULL) {
            stack_push(S, current);
            stack_push(S, current->left);
            continue;
        }
        /* visita il nodo estratto SE non ha figli sinistri */
        visit(current);
        /* visita il sottoalbero destro */
        if (current->right != NULL)
            stack_push(S, current->right);
    }
}
</code>
Questo e' il caso piu' generale.
Ci sono alcuni casi fortunati in cui non ti serve nemmeno lo stack perche'
hai un solo ramo di chiamate ricorsive.
<code>
void list_traverse_r(listnode * l)
{
    if (l) {
        visit(l);
        list_traverse_r(l->next);
    }
}
</code>
Questo lo si puo' sostituire in un semplice ciclo iterativo senza stack di
appoggio:
<code>
voit list_traverse_i(listnode *l)
{
    while (l) {
        visit(l);
        l = l->next;
    }
}
</code>
Se invece avessi piu' rami di chiamate ricorsive (come nel caso dell'albero
binario di cui sopra), ti serve uno stack.
Ecco un esempio semplificato.
<code>
int complicata (int parametro)
{
   int res;
   if (condizione_terminazione)
       return valore_opportuno;
   res = operazione(
             complicata(operazione(parametro)),
             complicata(operazione(parametro))
         );
   return res;
}
</code>
Qui a meno che una delle 2 chiamate non sia superflua, non hai modo di usare
la scorciatoia di cui sopra.
-- 
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: Strncat

A cosa serve e come funziona il comando "strncat"?
grazie
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG


http://www.kyuzz.org/antirez
finger 
ant...@tella.alicom.com
 for PGP key
28 52 F5 4A 49 65 34 29 - 1D 1B F6 DA 24 C7 12 BF
Newsgroup: it.comp.lang.c
Titolo: sito sul C

Ciao a tutti
Volevo chiedervi se conoscete qualche sito veramente bello dedicato al C
(con tanti, tanti, tanti esempi e codice =)
Grazie e ciao

 scrisse:

http://www.programmazione.it
http://www.gnu.org
ftp://ftp.gnu.org
http://www.debian.org
ftp://ftp.it.debian.org
http://www.apache.org
 :)
Credo che bastino, almeno per il codice :)
-- 
 (o-  | Un OS per domarli, Un OS per trovarli,
 //\  | Un OS per ghermirli e nel buio incatenarli
 V_/_ | Nella terra di Redmond, ove l'ombra cupa scende...
Tessera 99ers 204           raffaele punto salmaso presso libero punto it

Newsgroup: it.comp.lang.c
Titolo: chi lo sa?

chi mi sa dire perche' questo codice stampa 6 "uguale"?
non dovrebbe dare invece errore in compilazione quando mi riferisco
a i[a] dato che "i" non e' un puntatore ma un intero, e
comunque non ci azzecca nulla con a[i]?
#include <stdio.h>
main() {
int i;
char indirizzo[6] = {'f','e','r','d','y','z'};
char *a;
a = indirizzo;
for (i=0 ; i<6; i++)
    if(a[i] == i[a])
        printf("uguale\n");
    else
        printf("non uguale\n");
}

     if(a[i] == i[a])
a[i] equivale a *(a+i)
i[a] equivale a *(i+a)
ergo:
a[i] equivale a i[a]
http://www.eskimo.com/~scs/C-faq/s6.html
in particolare la 6.11
-- 
iAN CooG - ANTIFAN #1 di Simone Crisari
Judgement day the second coming arrives
Before you see the light, you must die!
(South of heaven) (Slayer Gig count: 5)

 comunque non ci azzecca nulla con a[i]?
Dunque, tu sai che:
a[i] == *(a + i) ok?
L'addizione, ovviamente gode della proprieta` commutativa, quindi:
*(a + i) == *(i + a)
Da qui segue che
*(i + a) == i[a]
e quindi:
a[i] == i[a]
Il compilatore  traduce entrambe le  notazioni (a[i] e  *(a + i))  in un
espressione del tipo base_addr + offset. Non importa quale dei due viene
indicato prima,  l'offset viene  sempre calcolato  come sizeof(*a)  * i,
mentre l'indirizzo e` quello fornito dal puntatore.
Nota  che  ovviamente  sizeof(a[i])  == sizeof(i[a]),  perche`  il  tipo
dell'espressione risultante e`  in entrambi i casi  determinata dal tipo
del puntatore.
Per  convincerti  che  entrambe   le  espressioni  portano  alla  stessa
locazione di  memoria puoi  aggiungere al  ciclo for  un'istruzione come
questa:
printf("a[i] -> [%p]\ti[a] -> [%p]\n", &a[i], &i[a]);
ciao
Kronos
-- 
Home: 
http://kronoz.cjb.net
Sono un mirabile incrocio tra Tarzan e Giacomo Leopardi.
In me convivono tutte le doti intelluttuali di Tarzan e
tutta la prestanza fisica di Giacomo Leopardi.
A. Borsani

     if(a[i] == i[a])
a=puntatore a carattere
i=intero
"a" non è altro che un indirizzo e "i" è considerato un offset
quindi se "a" vale 1124548 e "i" vale 2
che tu metta 1124548+2 o 2+1124548 per la commutatività della
somma ti riporta sempre lo stesso indirizzo.
questo è possibile perchè una volta allocata la memoria, il C
non fa più molta differenza tra puntatore e array, infatti, 
usando i puntatori se tu fai a+i o i+a ti ritrovi nella stessa
locazione di memoria.
ciao
-- 
By_Baitch
"Live Your Life!" (Ring ain't a jail)
http://utenti.tripod.it/baitch
Newsgroup: it.comp.lang.c
Titolo: Array

Salve a tutti, dato che e' la prima volta che posto qua.
Dovendo dare dei valori ad un array, pensavo di fare in questo modo:
-Battere a tastiera "17 20 25 71 17" ad esempio
-fare scanf("%d %d %d %d %d", &array[0], &array[1], &array[2],
&array[3], &array[4]);
Vorrei sapere se in questo modo i valori vanno a riempire
correttamente l'array, ovvero 17 nel primo spazio, 20 nel secondo,
eccetera.
Alla prossima,
Giovanni Cappellini
http://giovacappo.cjb.net
ICQ 166932196


I'm not prejudiced, I hate everyone equally.

 eccetera.
Se è un array di interi si.
Nicholas
-- 
Slackware 8.1 - 2.4.19 - GCC version 2.95.3

Non è che hai invertito ? :)
mm credo proprio di si' :|
 grazie


     scanf ("%d", &array[conta]);
gia' :)
grazie.


Newsgroup: it.comp.lang.c
Titolo: [?] File binari

Salve a tutti,
come posso scrivere con fwrite(*matrice, dim elemento, dim tot, *f1) una
matrice float 101x101 definita attraverso le nrutil e quindi come:
float **m;
**m = matrix(0,100,0,100);
con matrix una funzione che definisce un'array di puntatori che puntano alle
colonne della matrice.
Invece che passare l'indirizzo della prima cella della matrice passo **m che
punta all'array e quindi non va.
Grazie a chiunque mi dia un suggerimento.
Edoardo
La funzione matrix definita nelle nrutil e':
float **matrix(long nrl, long nrh, long ncl, long nch)
/* allocate a float matrix with subscript range m[nrl..nrh][ncl..nch] */
{
 long i, nrow=nrh-nrl+1,ncol=nch-ncl+1;
 float **m;
 /* allocate pointers to rows */
 m=(float **) malloc((size_t)((nrow+NR_END)*sizeof(float*)));
 if (!m) nrerror("allocation failure 1 in matrix()");
 m += NR_END;
 m -= nrl;
 /* allocate rows and set pointers to them */
 m[nrl]=(float *) malloc((size_t)((nrow*ncol+NR_END)*sizeof(float)));
 if (!m[nrl]) nrerror("allocation failure 2 in matrix()");
 m[nrl] += NR_END;
 m[nrl] -= ncl;
 for(i=nrl+1;i<=nrh;i++) m[i]=m[i-1]+ncol;
 /* return pointer to array of pointers to rows */
 return m;
}

 
FILE *fp;
fp=fopen(<filename>,"wb");
int i;
for (i=0; i < numero_righe; ++i)
   fwrite(m[i], sizeof(tuo_tipo), numero_colonne,fp);
Ciao.
Newsgroup: it.comp.lang.c
Titolo: Problema

Sono un po' di giorni che ho iniziato a studiare una parte di C un po'
ostica , i puntatori...
Tra i vari esercizi che stò svolgendo né ho trovato uno che mi sta dando
alcuni problemi.Ora lo scrivo speranzoso che qualcuno possa darmi una mano,
l'esercizio non è difficile, ma io sono imbranato.
Scrivere una funzione che prende una lista semplice L di interi (senza
puntatori all'indietro) e un intero n ed elimina ogni occorrenza di n.
Questo è l'esercizio.
Spero in qualche aiuto.

 Spero in qualche aiuto.
se la lista e' del tipo
struct elem {
 elem *next;
 int  value;
}
il cui ultimo elemenro ha next == NULL
basta un while, un if e un temporaneo

Ti ringrazio per l'aiuto. Spero di riuscire.

Scrivere una funzione che prende una lista semplice L di interi (senza
puntatori all'indietro) e un intero n ed elimina ogni occorrenza di n.
Questo esercizio mi da alcune difficoltà.Ho provato a risolverlo così:
void CancellaTuttiN(TipoLista *L, TipoElemLista n)
  {
  TipoLista prec;   /* puntatore usato per la scansione della lista */
  TipoLista aux;    /* puntatore ausiliario */
  prec = malloc(sizeof(TipoNodoLista));
  prec->next = *L;
  *L = prec;
  while (prec->next != NULL) {
    if ((prec->next->val) = = n) {
      aux = prec->next;
      prec->next = aux->next;
      free(aux);
    }
    else
      prec = prec->next;
  }
}
Può andare bene?
Vi premetto che sono un esordiente.

Newsgroup: it.comp.lang.c
Titolo: Una domanda su C e Pascal.

Ciao a tutti,
il mio problema č questo: ho una semplice funzione scritta in C
(compilata con Visual Studio)che mi calcola il fattoriale di un numero
intero. Vorrei richiamare questa funzione da una procedura scritta in
Pascal, come si fa?
Il problema piu generale č: posso richiamare un generico programma
scritto in C da un programma Pascal? Come si fa?
Grazie a tutti, saluti. 
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

Scusate se mi intrometto ma sarebbe ineterssante se lo postassi, non basta
avere un elenco di funzioni ?
Newsgroup: it.comp.lang.c
Titolo: Accesso ftp in c++

Sapete se c'e' un metodo per accedere a un server ftp e effettuare le
varie operazioni senza utilizzare un System????Che ne so, magari se
esiste una classe, una libreria o qualche cosa del genere? Vi
ringrazio!!!  Ciao Mauro.

mga...@excite.it
 wrote:

   In questo gruppo si discute del linguaggio di programmazione C cosi` 
come definito dagli standard ANSI ed ISO e non del C++, cui e` dedicato 
un apposito newsgroup (news:it.comp.lang.c++).
   Per quanto riguarda il tuo problema, quasi ogni compilatore comprende 
una libreria per interfacciarsi allo /stack/ TCP/IP della piattaforma 
per cui compila, queste librerie consentono anche la creazione di 
connessioni con server FTP a piu` di un livello: consulta lo 
documentazione del tuo compilatore per ottenere informazioni a riguardo.
   Comunque sia, questo tipo di librerie non rientrano negli standard 
del linguaggio sopra citati, per cui parlarne in questo contesto e` OT.
-- 
Veri pirati noi siamo       Ma cosa c'e` di male?
Contro il sistema lottiamo  Ma cosa c'e` di strano?
Ci esecritiamo a scuola     Facciamo un gran casino
A far la faccia dura        Ma in fondo lavoriamo
Per fare piu` paura         Per capitan Uncino

Newsgroup: it.comp.lang.c
Titolo: Manuale compilatore sotto Windows

Ciao a tutti,
mi sono da poco rimesso a studiare il C/C++ (avevo una infarinatura di 
livello meno-che-accademico). Lavoro su due PC con WinXP sviluppando con 
Dev-C++ su uno e wxDev-C++ su un altro. Nella cartella /bin 
dell'installazione di Dev-C++ ho trovato gli eseguibili g++.exe e 
gcc.exe che - a occhio - mi sembrano due compilatori, giusto? Volevo 
chiedervi se potevate linkarmi a qualche tutorial/manuale per imparare 
ad usare bene uno di questi due compilatori (magari inizierei col GCC).
Grazie,
Giulio
p.s. qualcuno di voi usa NetBeas per sviluppare in C/C++? E' possibile 
usarlo con uno di questi due compilatori?

 ad usare bene uno di questi due compilatori (magari inizierei col GCC).
Per il compilatore quello che ti serve per iniziare e' semplicemente
gcc -o prog.exe prog.c
dove prog.c e' il tuo codice C e prog.exe e' l'eseguibile che vuoi 
ottenere. Se hai piu' file sorgenti li puoi specificare uno si seguito 
all'altro. Piu' probabilmente quello che ti serve e' studiare il C.
E.

usarlo con uno di questi due compilatori?
http://www.netbeans.org/products/cplusplus/
Che Google sia con te :-)

 Piu' probabilmente quello che ti serve e' studiare il C.
Si, infatti sto approfondendo il linguaggio.
Solo che parallelamente mi sembra utile approfondire la capacità di 
utilizzo degli "strumenti". :-P
Ciao,
Giulio

 
http://www.netbeans.org/products/cplusplus/
Ri-Grazie.
Ciao,
Giulio

 consiglio?
Ottimo testo.  I testi migliori che conosco per il C++ sono quello di
Stroustrup classico e "C++ Primer" di Lippman-Lajoie (è venuta fuori la 4^
edizione negli USA e credo sia in fase di traduzione in italiano).
-- 
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: PERCHE?

Ho visto la lista degli interrupt: in pratica il metodo che usavo per
formattare l'hd è quello per la formattazione dei floppy! Infatti nella
lista che usavo io spiegava solo quel metodo e credevo si usasse per
qualsiasi tipo di drive ma sbagliavo. Sulla lista di Ralf Brown invece parla
di "INT 13 - FLOPPY - FORMAT TRACK" e di "INT 13 - FIXED DISK - FORMAT
TRACK" per fixed disk intende i dischi rigidi giusto??? Dice anche che prima
di accedere al disco tramite bios bisogna "bloccarlo" se ho capito bene devo
impedire al s.o. di accedere al disco durante la formattazione... sbaglio
oppure è così? Per fare questo c'è una funzione del dos (fà parte delle
IOCTL) ma non ho ben capito cosa riceve come parametri, c'è qualcuno che ha
già usato queste funzioni e ha voglia di rispondere a qualche mia domanda?
In pratica vorrei sapere cosa vuole "INT 21 - MS-DOS 7.0+ - GENERIC IOCTL -
LOCK LOGICAL VOLUME" quando chiede "BH = lock level (00h-04h)" cosa devo
passargli? Ho provato con 0 ma restituisce 0x05 cioè "access denied". Adesso
passiamo al vero problema... ho provato a mettere  nell'MBR un programmino
che prova a formattare la prima traccia del disco fisso (con FIXED DISK) e
scrive il valore di ritorno nel secondo settore del floppy. Il valore di
ritorno è 0x01 cioè "BAD COMMAND" quindi non è il s.o. che mi impedisce di
formattare il disco, ma è successa qualche cosa misteriosa... forse sono
quasi off topic (si scrive così?) cmq se non lo sono rispondete per favore.
Grazie per una eventuale risposta.
SIGN: Null Pointer Assignment.

Scusate, ho sbagliato, il messaggio era il continuo di "RE: BIOSDISK"...

quasi off topic (si scrive cosě?) cmq se non lo sono rispondete per favore.
In effetti non sei molto in topic. Potrebbe darsi che nel tuo programma
sbagli qualcosa. Comunque, rileggendo il tuo messaggio precedente, vedo che
parli di "formattazione a basso livello" (altrimenti detta LLF), e mi preme
avvertirti che e' una cosa ben diversa da quello che stai cercando di fare.
Il tuo programma, quando funzionera', eseguira' la stessa formattazione che
viene fatta dal comando format, o quasi; in breve: la LLF non si fa
attraverso il BIOS, ma programmando direttamente il controller. Inutile dire
che per farlo devi usare le utility presenti nel sito della casa
produttrice, utility che probabilmente non troverai, perche' molte case non
le rilasciano.
Saluti,
    Mardy

le rilasciano.
La funzione per formattare la traccia del disco riceve un buffer di 512 byte
dove devo mettere
informazioni di 2 byte per ogni settore, ma le tracce del disco possono
avere
al massimo 63 settori secondo le funzioni del BIOS, allora perchè 512 byte?
Ho provato la funzione "INT 13 - DISK - SET MEDIA TYPE FOR FORMAT"
e restituisce "01h function not available" dovrebbe significare funzione non
disponibile o
qualcosa del genere, perchè? Cmq scusate per l'offtopic, dove posso
continuare
a postare questi messaggi?
SIGN: Null Pointer Assignment.