mii-community/UsenetArchiveIT-conversations huggingface dataset:
Newsgroup: it.comp.lang.c
Titolo: Programmi (Sigh)

Qualcuno saprebbe gentilmente trovarmi esempi di programmazzione con liste
ed header in rete... Riesco a trovare solo programmi semplici che riesco
gia' a scrivere...
P.S: Ho un msg di include too deeply nested che puo' voler dire?
Grazie e saluti.

 Ho un msg di include too deeply nested che puo' voler dire?
  Che gli header che stai includendo includono a loro volta altri header
che includono ancora altri header fino a quando il preprocessore non
schioppa... ;)
	Alla prossima,
		Marco

 Grazie e saluti.

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

ho incontrato un problema nel cominciare a studiare le strutture in C
Per esempio ho definito i numeri interi come oggetti del tipo
typedef struct{
   unsigned       len;
   unsigned char *num;
} numero;
ora dovrei fare una funzione per dividere tali numeri (a proposito
qualcuno ha un algoritmo da proporre: sto implementando quello che
sappiamo tutti, ma non mi sembra molto vicino alle esigenze della
macchina); volevo definire il numero 0 in questa struttura.
Ora quello che non ho capito e perchè il codice
numero* dive(numero* a, numero* b, numero* ris, numero* resto)
{unsigned char p[1]={0};
 numero  n0[]={1, {0}}; <----mi da warning
 if(a==NULL || b==NULL || ris==NULL || resto==NULL) return NULL;
 if(minor(b, n0)==0) return NULL;
}
mi da il warning
Warning W8061 C:\ro\n\div2.c 176: Initialization is only partially b
+racketed in function dive
(dive poiché div è riservata al compilatore)

 numero  n0[]={1, {0}}; <----mi da warning
numero n0 = {1, "0"};
occhio  che  in questo  caso  la  stringa  associata  al numero  non  e`
modificabile.
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

> {unsigned char p[1]={0};
ci sono volute le proverbiali 7 camice per implementarla ...
Newsgroup: it.comp.lang.c
Titolo: ordinamenti e ricerche

qualcuno puo' consigliarmi della buona 'letteratura' su gli ordinamenti e le
ricerche in ansi c o non, italiano od inglese, free od a pagamento,
digitale o cartaceo..
grazie in anticipo del supporto

 digitale o cartaceo..
Io ho sfogliato in libreria "Algoritmi in C" di Robert Sedgewick (ISBN
8871921518).
M'è sembrato molto interessante ben fatto, e sugli algoritmi di sorting
c'erano decine di pagine. L'avrei anche comprato se non fosse che... costa
una paccata di soldi!
Qualcuno lo conosce? Vale la pena?
--
Cingar
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 
38 euro sono accettabili.. lo compro poi semmai ti faccio sapere..

 38 euro sono accettabili.. lo compro poi semmai ti faccio sapere..
He he he... Ho trovato chi mi fa da cavia. :-)
--
Cingar
P.S. Lo so, sono tirchio. Ma è una cosa genetica per noi brianzoli...
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

"unknown" <us...@host.network> ha scritto nel messaggio 
news:h2NVd.1000593$35.37...@news4.tin.it...

Ciao,
questo č un buon libro anzi, direi, una bibbia ma gli esempi non sono in c 
ma in un linguaggio like-pascal di facilissima comprensione. Personalmente 
ne ho fatto largo uso con grande soddisfazione per i risultati. Recentemente 
č stato tradotto in italiano.
Titolo: "Algoritmi + Strutture Dati = Programmi"
Autore:"Niklaus Wirth"
Spero ti possa interessare.
Un saluto. 

 Autore:"Niklaus Wirth"
Un mito. Vale la pena di impararsi il Pascal anche solo per leggere quel
libro.


 Autore:"Niklaus Wirth"
Ahimé, credo che sia fuori stampa.


 Qualcuno lo conosce? Vale la pena?
Sě, sě.



Non č cosě; edizione "Tecniche Nuove" (in italiano) e stampato giugno '97 da 
"Lasergrafica Polver". 

 "Lasergrafica Polver".
Sei sicuro ? hai un riferimento di chi lo vende ?
L'edizione di Tecniche Nuove che io conosco č del *1987*, non 1997.



Stampato nel '97 ma preferisco riportare fedelmente:
EDIZIONE ORIGINALE
Algorithms + data structures = programs
1976 Prentice-Hall, Inc. - Englewoods Cliffs, New Jersey
EDIZIONE ITALIANA
Traduzione di Stefano Piccardi
Revisione a cura di Donata Savini
1987 Tecniche Nuove, via Ciro Menotti 14 - 20129 Milano
STAMPA
Lasergrafica Polver, Milano
Finito di stampare nel mese di giugno 1997
Ad un mio collega, che l'ha ordinato il mese scorso, č arrivato la scorsa 
settimana.
Un saluto. 

unknown ha scritto:

La Bibbia č Knuth. Se hai abbastanza tempo e coraggio.
Ci trovi quasi tutto (tranne le scoperte piů recenti),
ed č la fonte di quasi tutti.
Andava citato :)
Il libro di Wirth (_creatore_ del Pascal btw) č bello e
utile non solo per gli ordinamenti ma per tutta la
programmazione strutturata.
Regards,
ozon / skim


 
e' in C? 

 
Knuth 
  e' in C? 

 
Quale dei libri di Knuth?
Ed, e' in C?
Newsgroup: it.comp.lang.c
Titolo: output su stampante!!!!

è possibile indirizzare l'output su stampante? se si come?

mi auto rispondo dopo essermi documentato su vari ng e pubblico la soluzione
poichč potrebbe tornare utile(spero) a qualcuno.
E' possibile reindirizzare l'output su stampante in vari modi :
* uno fra tanti č    mioprogramma>>prn  dove     mioprogramma č il nome del
programma e prn e il nome della stampante (lpt1);
*un altro č quello di scrivere il seguente codice (riporto solo un esempio):
 #include <stdio.h>
int main(void)
{
 FILE *ptr;
 ptr=fopen("LPT1","w") ;
 fprintf(ptr, "\n\n dimensione di char= %d byte", sizeof(char));
 fprintf(ptr, "\n dimensione di int= %d byte", sizeof(int));
 fprintf(ptr, "\n dimensione di long= %d byte",sizeof(long));
 fprintf(ptr, "\n dimensione di double= %d byte", sizeof(double));
 fclose(ptr);
 return 0;
 }
*un altro č quello di passare come parametro di stream della fprintf stdprn
ma sembra che non tutti i compilatori lo accettino (va un po a culo);ad
esempio a me dava stdprn is an "undeclared identifier".

Io una volta provai con questa riga di codice:
system("print");
Stampa a video un messaggio dove dice che il documento è in stampa ma
in realtà al fan'caz!
Newsgroup: it.comp.lang.c
Titolo: >> Tariffa giusta per programmare in C <<

sapreste indicarmi quale dovrebbe essere la tariffa media di un
programmatore C in base agli anni di esperienza?
Grazie

 programmatore C in base agli anni di esperienza?
In che senso "tariffa"?
Immagino che la maggior parte dei programmatori C siano o dipendenti o
consulenti fissi ("
co.co.co
.", insomma), per cui prendono uno stipendio
fisso, indipendentemente da quanto e quale codice producono.
Se invece lavori come libero professionista (cosa ben rara per un
programmatore C, almeno in Italia) non puoi parlare di "tariffa" ma di
"prezzo": un prezzo che, ovviamente, sarà determinato più dal valore di
mercato che il cliente è disposto a pagare per avere la tua opera che non
dal tempo o dallo sforzo che ti ci è voluto per farlo.
Comunque, sei un bel po' OT.
--
Cingar
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

Newsgroup: it.comp.lang.c
Titolo: Menù scelta

ho 30 o 31 file che corrispondono ai giorni del mese.
Devo fare un menů da cui si possa scegliere quale file aprire.
Con i tasti funzione arrivo fino a F12, mancano piů di 22 tasti :-)
Potrei fare cosi, stampare a video i nomi dei file, scrivere del codice
che muova sullo schermo un -> a sx del nome file e un <- a dx, e muoverlo
con la pressione di tasti direzione in su e in giů associato a un contatore.
Una cosa cosě:  -> 30 Agosto 2008.txt -<
Domanda: non c'č qualche cosa di pronto e piů semplice
da utilizzare e meno spartano?
Grazie

 da utilizzare e meno spartano?
Tipo una GUI? Tipo ncurses?
-- 
-riko

 Tipo una GUI? Tipo ncurses?
...si, ma non mi dire conio o pdcurses, :-)
per queste ultime non trovo degli esempi
di codice.
Ciao 

 ...si, ma non mi dire conio o pdcurses, :-)
Ho detto conio o pdcurses?
-- 
-riko

 -riko
no, ma nel caso. :-)
se non sono conio fioriranno, :-) , conosco per windows/dos
solo queste due.
Ciao

stavo solo scherzando!
Ciao

Newsgroup: it.comp.lang.c
Titolo: exe sotto win senza dll

salve,
vorrei creare un programma exe sotto win ma senza portarmi dll appresso.
uso il compilatore BC5 e quando creo un programma WinMain si porta sempre
delle dll appresso come posso fare per evitare cio'??
Esiste qualche programmino che ragruppa le dll nel mio file exe, o qualche
funzione del BC5 che mi libera da questo impiccio.
Voglio sviluppare dei programmini sotto win piccoli percio' ho questo
problema...
Ringrazio anticipatamente
grade76
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

uso il compilatore BC5 e quando creo un programma WinMain si porta sempre
se intendi borlad c++ Builder nel dialogo properties c'e' l'opzione
build with runtime packages, devi disattivarla :)
ciao
-------------------------------------------------
Kirys <Remove DELTHIS from the address to reply>
 /|// /____/ Kirys Tech 2000: 
http://www.kt2k.com
/_|\\  // 2000

Kirys wrote:



Il comilatore e' Corland c++ ma non e' il builder :(
sapresti aiutarmi??
grazie cmq :)


 grazie cmq :)
Stessa cosa da fare... (usare la static library, non dynamic libraries nelle
opzioni del progetto)
Newsgroup: it.comp.lang.c
Titolo: sorgenti delle funzioni delle librerie standard

Salve,
Sapete se sono dsponibili i sorgenti in assembly delle funzioni delle
librerie standard (soprattutto stdio)? Se può essere utile sono con windows
xp.
TIA
--
Ettore

 xp.
Ogni file binario compilato si puo' disassemblare in modo abbastanza 
semplice, ti basta scoprire la libreria.
Se ti accontenti dei sorgenti, puoi scaricare appunto i sorgenti delle glibc 
dal sito della GNU (sono sotto LGPL).
-- 
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: array dinamico si stringhe

Salve,
vorrei realizzare un array dinamico di stringhe.
Il codice qui sotto e' corretto, oppure e' una bestialita'? L'intento e'
quello di creare un array di MAX stringhe ciascuna con spazio pari a LEN.
---inizio ---
#define LEN 255 /* lunghezza stringa */
main () {
typedef char * stringa ;
stringa * arraystr;
int MAX = 10, /* dimensione array */
    i;
arraystr = (stringa *) malloc (MAX*sizeof(stringa));
for(i=0;i<MAX;i++)
  arraystr[i] = (char *) malloc (LEN*sizeof(char));
}
---fine---
Grazie in anticipo
Enrico

 quello di creare un array di MAX stringhe ciascuna con spazio pari a LEN.
Mi sembra OK.
Ciao,
Ema

Newsgroup: it.comp.lang.c
Titolo: come posso...

Come posso risolvere questo problema?
Sviluppo una semplice applicazioni che esegue un certo algoritmo, il mio
problema č questo:
se avvio l'applicazione da windows (cioč facendo clik sul file) si apre la
finestra windows, esegue le istruzioni che deve eseguire poi  la finestra
si chiude, adesso io vorrei che questa rimanesse aperta per vedere i
risultati dell'elaborazione. Cosa posso usare, per esempio, per tenerlo ad
esempio in attesa finche io non premo escape per far terminare
l'applicazione?
Ecco mentre scrivevo mi si č accesa la lampadina  dovrei racchiudere il
tutto in un ciclo while, prima che termini richiedere un certo tasto x
per uscire oppure un'altro tasto y per continuare e quindi il problema č
risolto.
Secondo voi va bene cosě oppure si puo fare qualcosa per evitare il ciclo
while?
Grazie!

 ha scritto nel messaggio
news:y1pF5.17137$Z95.5...@news.infostrada.it...


l'applicazione?
prova aggiungendo
#include <stdlib.h>    /* se non c'e' gia' */
[codice]
int main(...) {
   ...
   system("PAUSE");
   return 0;
}
cio' mette il sistema in pausa finche' non si preme un tasto.
Spero di esserti sato utile,
ciao!
Luca.

 while?
Non basta una chiamata a getchar() alla fine del programma, prima del
return finale?
EMG

Grazie per la vostra consulenza!
Newsgroup: it.comp.lang.c
Titolo: Numeri Random, lanci di un dado

Mettiamo di utilizzare i numeri random per simulare il lancio di un dado.
Per esempio, se si fanno 4 lanci per 10 volte, utilizzando la funzione
rand() inizializzata con il timer, ogni volta che viene effettuato il primo
lancio esce SEMPRE o per lo meno per un po' di tempo lo STESSO numero!
Forse dipende dal timer, ma IMVHO non è molto realistico questo evento!
Mi piacerebbe risolvere questo problema!
Il mio codice è il seguente:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define MIN 3
#define DIFF 15 //differenza tra minimo e massimo
void main( void )
{
   int i;
   int x = 0;
   //inizializzazione col timer per avere numeri sempre differenti
   //obbligatorio se vuoi avere numeri diversi
   srand( (unsigned)time( NULL ) );
   //for ipotetico di dieci numeri
   for( i = 0;   i < 10;i++ )
   {
      /*minimo + la differenza (MAX-MIN) moltiplicato la funzione
      che restituisce un numero casuale tra 0 e RAND_MAX*/
      x = MIN+( DIFF *rand()/RAND_MAX);
      printf( "  %d\n", x );
   }
}
Grazie Ciao Ciao


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

 ha scritto nel messaggio
news:Dyz78.18420$nI1.5...@twister1.libero.it...


Ok l'ho provato e funziona correttamente

#define GetRandom( min, max ) ((rand() % (int)(((max) + 1) - (min))) +
(min))

        return (r % MAX) + 1;
Questa  e` una  cosa da  non fare:  con alcuni  generatori e`  possibile
riscontrare una  correlazione nei  bit meno  significativi.  Utilizzando
quella scrittura, di fatto, tu vai  utilizzare proprio quei bit e la tua
sequenza potrebbe essere "meno casuale" di quello che dovrebbe essere.
ciao
Kronos
-- 
Home: 
http://kronoz.cjb.net
Windows /win'dohz/ n. : thirty-two  bit extension and graphical shell to
a sixteen  bit patch to an  eight bit operating system  originally coded
for a  four bit microprocessor  which was  written by a  two-bit company
that can't stand a bit of competition.

      x = MIN+( DIFF *rand()/RAND_MAX);
Stai usando operazioni fra interi, meglio usare numeri in floating
point, per questo ho usato 15.0 al posto di 15:
x = MIN + (int)(DIFF * rand() / (RAND_MAX + 1.0));
ciao
Kronos
-- 
Home: 
http://kronoz.cjb.net
La vispa candela bruciava l'erbetta
creando un'essenza alquanto sospetta;
sembrava l'odore di una sacrestia
ma presto mi accorsi che era maria.

 ha scritto nel messaggio
news:a3mpod$9og$3...@dreamland.darkstar.net...

Newsgroup: it.comp.lang.c
Titolo: Domandina di file I/O

Ciao a tutti !
Vorrei sapere qual'è il modo più serio e performante per troncare un FILE *
ad un determinato punto (ovvero numero di byte). Ho sperato che ci fosse una
qualche funzione del tipo truncate(FILE * file_stream), ma non sono riuscito
a trovarne una equivalente. Dato che una soluzione che richieda un file
temporaneo di appoggio mi sembra terribilente lenta e soprattutto inutile,
poichè non vedo motivo perchè un file non si possa troncare, mi appello al
newsgroup, sperando in una risposta miracolosa =P
'sera lietissima, Marco



tranquillo. Hai miei tempi ho cercato la stessa cosa, questa e' la
risposta
SYNOPSIS
       #include <unistd.h>
       #include <sys/types.h>
       int truncate(const char *path, off_t length);
       int ftruncate(int fd, off_t length);
DESCRIPTION
       The  truncate  and  ftruncate functions cause the regular file named by
       path or referenced by fd to be truncated to a size of precisely  length
       bytes.
esiste proprio 'truncate', come speravi :)
Ciao,
Riccardo
-- 
-=Riccardo Galli=-
 _,e.
s~  ``
 ~@.   ideralis Programs
.   ol 
 `**~  
http://www.sideralis.net

esiste proprio 'truncate', come speravi :)
Solo nello standard POSIX, che io sappia, non in ISO C.
-- 
Andrea Laforgia
Open Delphi Manual
http://groups.yahoo.com/group/delphi_open_manual/

 Riccardo
Davvero grazie a entrambi !
Ad ogni modo, sono stato un mezzo fesso e prima ho postato, e poi ho
guardato su goggle, trovando abbondanti risposte... e infatti, se non ho
capito male, f-truncate() è per linux, mentre io stavo scrivendo sotto
windows, quindi userò chsize, magari con qualche #define per dare una
parvenza di portabilità...
Tanto che ho postato, c'è un'altra domanda forse più tecnica che mi frulla
nel cervello: la chsize, o truncate, "incapsulano" delle chiamate al sistema
operativo oppure usano un file temporaneo per la copia ? Ovviamente lo
chiedo per giudicarle in termini di performance, perchè se usassero un file
temporaneo per la copia cercherei, se ce ne sono, delle API che facciano al
caso mio =)
'sera lietissima, Marco
Newsgroup: it.comp.lang.c
Titolo: strcmp( riga[i], " ") xchè non va?

ciao. ho un problema. leggo una riga da un file, devo vedere se all'interno
di questa riga
c'è uno spazio vuoto.
char riga[41];
scorro con un ciclo i caratteri della stringa e con
strcmp( riga[i], " " )
cerco se c'è lo spazio vuoto ma mi va in errore.
ho provato anche con
strchr( ..... )
ma anche in questo caso mi va in errore.
scusate ma sono un novellino.
grazie
ciao

 cerco se c'č lo spazio vuoto ma mi va in errore.
A parte il fatto che strcmp( ... ) confronta due stringhe, quindi non puoi
cercare un carattere con questa funzione bensě confrontare due stringhe,
comunque il prototipo della funzione "strcmp" č:
int strcmp( const char * _a, const char * _b )
Questa funzione, come si vede, richiede che entrambi i parametri siano
puntatori a caratteri, mentre tu passi un carattere come primo argomento.
Dovresti scriverla come:
strcmp( riga, " " )
Oppure, se vuoi cercare quel carattere nella stringa...
--- CUT HERE ---
int pos;
for( pos = 0; riga[ i ] && riga[ i ] != ' '; ++pos);
--- CUT HERE ---
In questo modo, in "pos" trovi la posizione del carattere. Il che č
equivalente a fare
--- CUT HERE ---
int pos;
char * where = strchr( riga, ' ' );
pos = where - riga;
--- CUT HERE ---
Ciao!
Azathot

strcmp( riga[i], " " )
???
    if (riga[i] == ' ') ...
-- 
Andrea Laforgia
#exclude <windows.h>
Newsgroup: it.comp.lang.c
Titolo: funzione di somma ricorsiva

Salve a tutti,
a lezione abbiamo implementato questa funzione per fare la somma degli
elementi di un vettore molto velocemente ma non funziona, qualcuno
gentilmente potrebbe dirmi dove č l'errore?
====CODE====
int somma(int *v,int first, int last)
{
if(first<last)
  return v[first]+ somma(v,first+1,last);
else
  return v[last];
}
====/CODE====
Ciao e grazie find a ora
Luigi

 }
Per un vettore di 10 posizioni, la devi chiamare cosi':
    somma(v, 0, 9)
-- 
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."

>gentilmente potrebbe dirmi dove è l'errore?
L'errore e' nel ritenere che questa funzione possa fare la somma degli 
elementi di un vettore molto velocemente.... dovrebbe essere ovvio
che in questo caso la soluzione non ricorsiva e' mooooolto piu' veloce.
Comunque anche a me sembra giusta.
Ciao,
g.

 Probabilmente nel modo in cui la chiami.
Ciao Mox,
grazie per il suggerimento era proprio questo l'errore.
Luigi

Newsgroup: it.comp.lang.c
Titolo: Richiesta di un consiglio. Esiste un Tool Visuale del genere?

Salve, vorrei chiedere un consiglio.
Io devo creare una interfaccia WEB (per un gestionale Client/Server)
connessa ad un database oracle.
L'infrastuttura è questa come client un browser web che va a collegarsi
ad un server Web/Jsp che è Tomcat-Apache su Win2000
che poi esegue le relative query (in Jsp) create tramite interfaccia Web 
sul database Oracle.
Le interfaccie WEB che devo creare sono relative alle tabelle del db oracle,
cioè la tabella Cliente se ha 10 campi il primo è un textbox il secondo 
un combobox etc..
Adesso per creare queste interfacce WEB vorrei sapere se esiste un Tool 
Visuale
semplice tipo Visual Basic che una volta connesso con il db oracle 
prendo il campo
che mi interessa lo inserisco in un form stile drag and drop e il tool 
automaticamente
mi crea l'interfaccia WEB.
Finora non ho trovato niente del genere e per fare queste interfacce sto 
utilizzando
Cocoon che usa XML/XSL tra l'altro il file xml
di partenza che poi verrà trasformato tramite xsl in html e in realtà un 
file xsd
che mi tira fuori XMLSpy che mi dà la struttura del database,
io aggiungo solo un nodo che rappresenta il tipo di campo nel form html
(textbox, checkbox..) e poi usando il form html, posso inserire record, 
modificare etc...
Scusate se sono stato prolisso, ma così mi sono spiegato meglio. 
Grazie.....Marco

 connessa ad un database oracle.
Nessuna domanda sul linguaggio C... Ergo, sei nel posto sbagliato.
-- 
Enrico 'Trippo' Porreca

Newsgroup: it.comp.lang.c
Titolo: Informazione Newbies

Secondo voi, conviene iniziare a studiare il C o il C++ per un Newbies???
Potete anche consigliarmi un buon link dove posso trovare magari le
differenze tra i due linguaggi e capire quello che piů č adatto a me???
Grazie

 Secondo voi, conviene iniziare a studiare il C o il C++ per un Newbies???
Mai programmato prima? Allora meglio iniziare con linguaggi più adatti
(Pascal?).
EMG

Secondo voi, conviene iniziare a studiare il C o il C++ per un Newbies???

Newsgroup: it.comp.lang.c
Titolo: GIE

Che è.
E' il nome che vorrei dare al mio progetto di database intelligente.
Credo che il modo di archiviare i dati sia comunemente poco interattivo
Esempio i miei dati :    nome pippo, cognome caio ecc.
E se c'è unaltro pippo perchè devo sprecare memoria per archiviare due campi
identici?
E? per questo che vorrei realizzare un database che memorizzi i diti con
un'altro criterio.
Esempio una serie di database integrati : 1^ database nome, 2^database
cognome, 3^ database peso, 3^ database <altro>
In questo modo si realizza una gerarchia di dati nome dimente da ragione
sociale, città dipende da regione e a sua volta da nazione ecc.
Successivamente posso apliare il discorso e dare agli oggetti una fisicità e
una connettività.... spider--->ingombo, seicento--->ingombro, oppure
un'armadio non entra in uncassetto!
Se poi definisco oggetti che non sono semplici dati ma procedure che
lavorano sugli oggetti creati ottengo un database intelligente dal quale con
una buona struttura gestionale e interfaccia grafica permette a tutti di
fare programmi.. fatti di oggetti e procedure.
---> la serrattura ha rapporto con la chiave la quale ha rapporto in comune
con altre chiavi con un portachiavi.
Se cambio una serratura consegue che devo cambiare tutte le chiavi che hanno
rapporto con la serratura modificata, di conseguenza dalla procedura "metti
insieme una mazzo di chiavi" deduco che dal mazzo X devo sostituire la
chiave iesima.
Un record diventa unassociazione di oggetti già in archivio.
Miei dati = associazione da l'oggetto nome pippo e l'oggetto cognome caio
ecc.
Sebrerà farneticare (e forse lo è) eppure c'è qualcosa che mi stuzzica la
materia grigia che mi dice di approfondire e di provare a rendere
"funzionante" questa idea. Magari la cosa è già in commercio e la vendono
nel supermercato sotto casa ma nons apendolo per me non esiste!


Tutti i database relazionali lo fanno.
C'è solo l'imbarazzo della scelta.
Ciao



Senza contare che esistono anche DBMS object-oriented!
Newsgroup: it.comp.lang.c
Titolo: [semi-OT] Selezione del carattere di stampa (WIN)

Salve. In un programma C mi trovo a dover far stampare del testo da Windows
su una stampante. Ho utilizzato la funzione TextOut, la quale stampa;
l'unica cosa è che il font (e le relative dimensioni) non è uguale su
tutte le stampanti. Potreste indicarmi una funzione per scegliere il
carattere di stampa? Mi servirebbe un Courier New (o al limite un altro tipo
a larghezza fissa) di 10 o 12 punti.
Programmo da molto tempo in C per Dos, ma ora è sorta la necessità di
realizzare un programma che stampi sotto Windows. In passato bastava usare
una fprintf su stdprn, ma la standard printer non funziona se si hanno
stampanti USB o di rete (o, almeno a me, blocca l'applicazione).
Grazie mille!
- Alberto

 Salve. In un programma C mi trovo a dover far stampare del testo da Windows
 > [CUT]
Sei sul newsgroup sbagliato: prova it.comp.programmare.win32 :)
Ciao!
-- 
/**
  * 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
  */

 Sei sul newsgroup sbagliato: prova it.comp.programmare.win32 :)
Lo so, infatti il subject era chiaro. Ti ringrazio del suggerimento, ho
chiesto anche sul NG che hai indicato. Chiedo scusa. Saluti.
- Alberto
Newsgroup: it.comp.lang.c
Titolo: crittografia per trasposizione AIUTO!!!!

Salve ho scritto questo programma
che crittografa una stringa per
trasposizione ossia prende una determinate
distanza per esempio 2 ed inverte le lettere
seguendo tale distanza.
Esempio
diamanti
con distanza 4
risulta crittografato
aitndmai
fino qui nessun problema
critta e decritta correttamente.
Notate che 4 e' appunto meta'
lunghezza della stringa in questione
un caso particolare!!
Se uso invece una distanza  2 o 3
ottengo
cose del tipo amdiiynt e la y ha 2 puntini
sopra alla tedesca e  perche'?.
Ma anche peggio con distanza 3 di y ne ottengo
una sfilza....e non crittografa piu' un bel nulla.
Mi serve per scuola se qualche anima buona lo leggesse...
#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>
void decodifica(char *ingresso,char *uscita,int scorr);
void codifica(char *ingresso,char *uscita, int scorr);
void main(int argc,char *argv[])
{
int scorr;
if (argc!=5){
printf("Riga di comando:ingresso uscita C(odifica)/D(ecodifica)
distanza\n");
exit(1);}
scorr=atoi(argv[4]);
if (toupper(*argv[3]=='C')) codifica(argv[1],argv[2],scorr);
if (toupper(*argv[3]=='D')) decodifica(argv[1],argv[2],scorr);
}
void codifica(char *ingresso,char *uscita,int scorr)
{
int memo;
char temp;
int t,s;
char stringa[256];
FILE *fp1,*fp2;
if((fp1=fopen(ingresso,"rb"))==NULL){
 printf("Impossibile aprire il file in ingresso\n");
 exit(1);}
if((fp2=fopen(uscita,"wb"))==NULL){
 printf("Impossibile aprire il file in uscita\n");
        exit(1);}
memo=0;
do
{
for(t=0;t<=(scorr*2);t++){
stringa[t]=getc(fp1);
    if(feof(fp1)){
    stringa[s]='\0';
    memo=1;
    }
}
for (t=0;t<scorr;t++){
temp=stringa[t];
stringa[t]=stringa[t+scorr];
stringa[t+scorr]=temp;
t++;
temp=stringa[t];
stringa[t]=stringa[scorr*2-t];
stringa[(scorr*2)-t]=temp;
}
for (t=0;t<(scorr*2);t++) putc(stringa[t],fp2);
}
while(!memo);
fclose(fp1);
fclose(fp2);
}
void decodifica(char *ingresso,char *uscita, int scorr)
{
int memo;
char temp;
int t;
char stringa[256];
FILE *fp1,*fp2;
if ((fp1=fopen(ingresso,"rb"))==NULL){
printf("Impossibile aprire il file in ingresso\n");
exit(1);
}
if ((fp2=fopen(uscita,"wb"))==NULL){
printf("Impossibile aprire il file in uscita\n");
exit(1);
}
memo=0;
do
{
for (t=0;t<(scorr*2);t++){
stringa[t]=getc(fp1);
   if(feof(fp1)){
   stringa[t]=0;
   memo=1;
   }
}
for(t=0;t<scorr;t++){
t++;
temp=stringa[t];
stringa[t]=stringa[scorr*2-t];
stringa[scorr*2-t]=temp;
t--;
temp=stringa[t];
stringa[t]=stringa[t+scorr];
stringa[t+scorr]=temp;
t++;
}
for(t=0;t<scorr*2;t++) putc(stringa[t],fp2);
}while(!memo);
fclose(fp1);
fclose(fp2);
}
--
Posted from 
ro...@obelix.val.it
 [194.244.89.2]
via Mailgate.ORG Server - 
http://www.mailgate.org

ma temo di non vapire quale modulo?
l'operazione % di modulo
Augusto Pucci
Webmaster di Prospektiva On-line
http://go.to/Prospektiva

Ciao grazie mille per l'interessamento
ma temo di non vapire quale modulo?
--

Newsgroup: it.comp.lang.c
Titolo: vettori

ciao, premetto che sono un niubbo di c... chi di voi mi può dare una mano?
allora, io ho un vettore che contiene una stringa
es..
vettore1 = "ciao"
come posso ordinare questo vettore nell'ordine inverso assegnando questa 
stringa ad un nuovo vettore?
es.
vettore2 = "oaic"
grazie mille


* Prendi la lunghezza di vettore1
* allochi memoria sufficiente per vettore2
* Fai un ciclo for da o a n-1 (dove n è la lunghezza del vettore1) e
assegni in senso opposto i valori
C'è un'ultima cosa da fare, ma credo sia meglio per te se ci arrivi da
solo.
s.

solo.
Suggerisco anche un algoritmo molto efficiente:
* immagina di scrivere questa funzione
* pensa come la chiameresti (io la chiamerei "strreverse")
* usa google o altro motore di ricerca con quella parola
Il primo risultato e' quasi quello che vuoi. Lo fa sul posto, se ci fai 
strcpy prima sei a posto.

 * pensa come la chiameresti (io la chiamerei "strreverse")
Meglio evitare il prefisso "str" perché riservato alle implementazioni di
funzioni standard.
-- 
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: Ancora sul parsing...

Buona sera...
Sono ancora qui per chiedervi delle delucidazioni sul parser che ho postato
in "Non uccidetemi".
In quel programma è presente la seguente funzione:
void evalexp(long double * answer)
{
  get_tok();
  if (!*token)
  {
    er=2;
    return;
  }
  sum_exp(answer);
  if (*token) er=0;
  result = *answer;
}
e non capisco cosa vuol dire:
if (!*token){...}
e
if (*token) er=0;
oltretutto da quello che ho capito, uno è il contrario dell'altro... e
quindi uno dei due viene eseguito per forza... ma entrambi portano ad
attribuire a "er" un valore diverso da "-1", cioè l'unico che indica che
tutto è ok!
Quindi, secondo il mio ragionamento, il programma non dovrebbe funzionare,
perchè in ogni caso dovrebbe riportarmi un messaggio di errore.
E invece funziona perfettamente. Why? Dove sbaglio?
Infine: che limite hanno i long double?
il problema è che se scrivo un numero composto da + di 18 cifre, quelle in +
me le fa diventare zeri!
ad esempio:
123456789012345678901234567890
diventa:
123456789012345678000000000000.00000
Perchè?
Grazie, come sempre!


*token = TRUE se il valore della variabile puntata da token e' diversa da 0;
!*token e' uguale a scrivere ( 0 == *token ),che quindi e'  TRUE se il valore
della variabile puntata da token e'  0;
Ivan Molella

me le fa diventare zeri!
Perche' i numeri in formato virgola mobile hanno un numero di cifre
significative limitato (15 per i double e 7 per i float, nel formato
IEEE 754).
--
Andrea Laforgia (
andrea_...@bigfoot.com
)
---------------------------------------------
Newsgroup: it.comp.lang.c
Titolo: [GCC] Promozione tipo, ottimizzazione spazio stack

Ciao NG,
Scusate se sono parzialmente OT ma temo di essere
rimasto *molto* indietro dai tempi del microsoft MSC
di tanti anni fa, poi certe domande non me le sono
quasi più poste.
Il compilatore che uso è MinGW ma se il
comportamento è generale tanto meglio.
1) Supponiamo che io debba valutare un'espressione
moltiplicando di fila N volte degli uint8_t. So in
partenza che il risultato necessiterebbe di
uint32_t. Per non saper né leggere né scrivere ho
sempre fatto conversioni esplicite già dalle foglie
degli alberi delle espressioni, in modo da non
trovarmi overflow per strada. Anzitutto: ho fatto
sempre male, sempre bene, o sempre indifferente
perché il compilatore "capisce" in quanto a primo
membro dell'assegnazione c'è una variabile uint32_t?
Se no, come si fa per procedere correttamente
risicando sullo spazio del codice senza creare
potenziali punti in cui si verifica overflow?
2) Ho sempre pensato che se dichiaro una variabile
non statica nel corpo di una funzione, lo stack
viene comunque riservato. Un amico mi ha detto che
se invece dichiaro due variabili e non le uso
contemporaneamente, il compilatore se ne accorge e
alloca spazio solo per una producendo ovviamente
l'assmbler corretto. Se è così, come posso
consapevolmente sfruttare questa caratteristica?
Ovvero, se anche so che il compilatore allocherà il
minimo spazio di stack, può essere che sapendo cosa
fare si risparmi il più possibile? Se sì come si fa?
grazie!
Apx.
-- 
l'apoteosi...
http://www.youtube.com/watch?v=NwGiEl3UYCA&playnext_from=TL&videos=AVYLg4Rgt_M


Ogni compilatore può ottimizzare quanto vuole quel che vuole. A
seconda dei casi, questa fantomatica funzione potrebbe addirittura
essere rimossa del tutto dall'oggetto finale :)
In generale, non puoi *sfruttare* nessuna caratteristica del
compilatore in maniera sicura, visto che andrai a dipendere da uno
specifico compilatore, ad una specifica versione e, in questo caso, ad
una specifica combinazione di switch di compilazione. Per carità di
Dio! :D
Ciao!
Newsgroup: it.comp.lang.c
Titolo: Commenti e a capo

Ciao,
 
ho questo codice:
 
//  if(a==1 && b==2)\
    if(c==1)
    {
        //fa un po' di tutto)
    }
 
quello che c'e' dentro l'if() non e' importante (e non chiedetemi
perche' ho un if che finisce con un \)
 
Il problema e' che il compilatore pensa che anche il secondo if() sia un
commento.
 
E' normale?
 
Ciao Jack
-- 
Yoda of Borg am I! Assimilated shall you be! Futile resistance is, hmm?

 E' normale?
 
Non so se mi sto confondendo con altri linguaggi, ma mi sembra che
il "\" a fine riga serve proprio per indicare che la riga successiva
e' la continuazione di quella corrente, quindi in pratica gli dici
che il secondo "if" fa ancora parte del commento.
 
ciao
Giacomo

 wrote:

Si, il problema e': e' giusto che il \ abbia la precedenza su // ?


 
 
Sì. Il '/' è lì solo per motivi "estetici" (rompere le linee troppo lunghe per
la visualizzazione) ed è uno dei primi caratteri ad essere rimosso dallo step
precedente al preprocessore (insieme ai trigraphs, suppongo).
Ciao!

 Ciao!
 
Ah ok. Buono a sapersi.
 
Grazie Ciao Jack



 
Questo fu proprio oggetto di una lunga discussione su comp.lang.c
dove postai le seguenti linee (le traduco):
 
[..] questo mi ricorda un esempio tratto da "C Unleashed",
      qualcosa come:
 
      func1(path); // in C:\DIR\
      func2(path);
 
quindi il preprocessore eseguir�:
 
1) line splicing:
 
      func1(path); // in C:\DIRfunc2(path);
 
2) comment removal (..e il risultato �):
 
      func1(path);
 
Questo � l'argomento principale per cui i commenti in stile C++ non
sono molto consigliati dai puristi del C. Non � un "bug" del
linguaggio, � proprio l'unico modo di implementare la fase di
preprocessing.
 
-- 
Vincenzo Mercuri

 Il '/' è lì solo per motivi "estetici" 
 
'\'?


ehehe sì, ovvio, mi son sbagliato gli slash! :)
Ciao!

Newsgroup: it.comp.lang.c
Titolo: Help!!!

Come si fa a leggere i caratteri di una riga di un file di testo, e come si fa foi a leggere la riga successiva, esistono dei comandi particolari che forzano il puntatore al file sulla riga successiva?
Grazie.

...

Ciao Fabio,
puoi utilizzare le funzioni fgets() per leggere una stringa da un file ed
fgetc() per leggere un carattere.
La posizione del puntatore all'interno del file, per poter leggere la riga o
il carattere successivo, viene aggiornata automaticamente dalle funzioni
stesse.
Puoi comunque utilizzare fseek() per posizionare il puntatore al file nalla
posizione che tu preferesci.
ciao, Franco.
Franco Torrini - Software Engineer - 
f.to...@virtuart.it
VIRTUART - C.C.D. Creative Computer Design S.p.A.
Via di Quarto Annunziata, 80/b - 00189 Rome, Italy
Tel. 
+39 (06) 33076638
 - Fax. 
+39 (06) 33076670

Newsgroup: it.comp.lang.c
Titolo: Compilatore dove?

Ciao ragazzi?
dove posso trovare un buon compilatore C?
Sotto Windows?
Io a scuola usavo Turbo C e stava in 2 disketti!!!
Dove posso trovare lo stesso o altri simili?
Grazie

 ha scritto nel messaggio
news:Auk%7.6600$cU4.2...@twister1.libero.it...
[CUT]
... 
www.delorie.com
Ciao
Roberto
Newsgroup: it.comp.lang.c
Titolo: printf: argomenti come puntatori?

Vorrei creare una tabella fatta in questo modo:
  int pippo = 53;
  char *pluto = "Hello";
  float topolino = 10.3;
  struct {
    char *fmt;
    void *ptr;
  } printf_table[] = {
    { "%3d\n", &pippo },
    { "%s\n", pluto },
    ...
    { "%f\n", &topolino },
  };
  printf (printf_table[i].fmt, printf_table[i].ptr);
Il problema è che alla printf devo passare un puntatore generico
perchè non so in partenza il tipo della variabile da convertire. Ma la
printf può accettare puntatori, anzichè i valori?


Si, ma ne stampa il valore, non stampa il valore del dato a cui
puntano.
Devi dereferenziare il puntatore per ottenere il valore da passare a
printf.
Per fare quello che ti serve dovresti poter fare un cast
dinamicamente,
qualcosa tipo:
   // peccato che non funziona!
   printf(table[i].fmt, *((table[i].type *)table[i].ptr));
che pero' non si puo' fare perche' i tipi non si possono memorizzare.
Potresti adottare una soluzione "a oggetti": definisci alcune funzioni
di stampa tutte con identico prototype:
  int print_intero( void *p ) { return printf("%d", *((int *)p)); }
  int print_stringa( void *p ) { return printf("%s", *((char **)p)); }
e poi nella tabella metti un puntatore a funzione inizializzato con la
corrispondente funzione di stampa
  struct {
    void *ptr;
    int *printfun(void *);
  } printf_table[] = {
    { &pippo, print_intero },
    { &pluto, print_stringa },
    ...
    { &topolino, print_float },
  };
al momento di stampare usi il puntatore:
  table[i].printfun( table[i].ptr );
il tutto e' rigorosamente non testato quindi potrebbero esserci
errori! ;)
ciao
Giacomo

 wrote:

Non riesco a capire il senso di questo approccio. In ogni caso se
proprio sei deciso ad andare avanti per questa strada, io definirei
dei tipi e una funzione di stampa seprata.
#define T_INT 1
#define T_STRING 2
#define T_FLOAT 3
typedef int vartype_t;
struct pf_s {
    vartype_t type;
    void *data;
};
struct pf_s printf_table[] = { {T_INT, &pippo}, {T_STRING, &pluto},
{T_FLOAT, &paperino} };
void pf_s_printf(struct pf_s *st)
{
    switch(st->type) {
    case T_INT:
        printf("%d", *(int*)(st->data));
        break;
    case T_STRING:
        printf("%s", *(char**)(st->data));
        break;
/* ... */
    default:
        printf("%p", st->data);
    }
}
/* ... */
pf_s_printf(&table[i]);
/* ... */
Ciao!
Newsgroup: it.comp.lang.c
Titolo: SOLO a chi sa "tradurre" da PASCAL a C/C++ [Spero non OT]

Salve a tutti! Scusate se ho spedito il messaggio a due NG, ma confido nel
fatto che qualche frequentatore possa aiutarmi. Il mio problema attualmente
e' che dovrei tradurre un piccolo programmino scritto in PASCAL (in verita'
sarebbe in Delphi ma la parte della VCL e tutto il resto me ne occupo io).
Quello che non sono mai riuscito a "tradurre" (qual'e' il termine adatto?
"fare il porting"?) e' la parte relativa agli array. Il codice e' il
seguente:
TBoard = array[-4..19][0..9] of Integer;
io ho pensato che si traducesse cosi':
int TBoard[19][9];
pero' dopo, come e' giusto che sia, c'e' una dichiarazione di variabile che
usa il tipo TBoard (perche' per quel poco che ricordo, in PASCAL gli array
sono dei tipi strutturati):
fboard : TBoard;
naturalmente in C/C++ non posso fare una cosa del genere
TBoard fboard;
o si puo' fare? Come vado avanti? Scrivendo "typedef int TBoard[19][9]" cosa
ottengo? Spero che qualcuno mi aiuti! Grazie
anticipatamente a quelli che mi risponderanno e scusate se sono un po OT!
P.S. Come si traduce l'istruzione "exit"?
HellHound - uccidi CERBERO per l'email

 TBoard = array[-4..19][0..9] of Integer;
senza stravolgerti tutto il codice e indici ti indico il modo veloce per
farlo usando degli spiazziamenti per riadattare gli array standard
int TBoard[24][10];
poi nel codice dove usi l'array con i puntatori usi gli spiazzamenti
for (i=-4;i>19;i++)
    for (j=0;j>9;j++)
        printf (" %d ",TBoard[i + 4][j]); // cosi fai lo spiazzamento
dell'indice i per riadattartelo all'uso degli algoritmi scritti senza dover
perforza riscrivere tutti controlli e cicli
spero di essere stato utile

 HellHound - uccidi CERBERO per l'email
exit(n); // dove n e' codice di errore
se usi gli oggetti puoi usare direttamente il return nel metodo main per
avere lo stesso risultato ed anzi avendo del guadagno in modularita', cosi'
facendo il tuo oggetto principale potra' essere inglobato dentro altre
risorse senza dover piu' fare manutenzione ma semplicemente usandolo come
una scatola nera

occavolo mi scuso ancora in crospot di aver crospottato il tutto ... mi sono
accorto solo dopo aver letto i due news che il tipetto sopra da bravo utonto
e non seguendo la net-tiquette aveva crospottato ...
mi scuso quindi a tutti i membri dei 2 news su cui per non aver letto il
campo di send ho crospottato
Newsgroup: it.comp.lang.c
Titolo: ordinamento array stringhe

Qualcuno sa dove posso trovare online un esempio in C di ordinamento
di vettori stringhe?
Devo ordinare in ordine alfabetico gli autori dei libri contenuti in
un database, l'array č contenuto in una struttura
grazie
ciaoz

 di vettori stringhe?
Basta che cerchi ordinamenti di tipo Bubble sort, Insertion sort, Selection
sort, Shell sort, Quick sort, Merge sort. Se sono stati implentati per
ordinare array di interi e' sufficiente che sostituisci i confronti del tipo
(a>b) con (strcmp(stringa_a,stringa_b)).
Se ti interessa un algoritmo di facile comprensione cerca direttamente il
bubble, altrimenti se te ne serve uno piu' efficiente (di complessita'
nlogn) vai sul quick o sul merge sort.
--
----------------------------------------------------------------------------
There are 10 kinds of people in the world:
those who understand binary, and those who don't
----------------------------------------------------------------------------

di vettori stringhe?
QuickSort (cerca in rete).
La libreria standard del C prevede qsort() che può eseguire
ordinamenti su array di qualsiasi tipo (analogamente a bsearch() per
la ricerca dicotomica).
-- 
Andrea Laforgia - a.laforgia(at)
libero.it
"There are three kinds of people in this world; 
 those who are good at maths and those who aren't".

Alberto ha scritto:
allora l'algoritmo più efficiente per le stringhe è il radix-sort a byte
però richiede uno spazio doppio rispetto a quello di input e un vettore 
di 256 interi (1kb)
In alternativa si può scelgiere di eseguire il radix sort su porzioni si 
testo e poi fare il merge ottiene complessità nlog(part(n))
Ho una struttura di 1kb per 1M di elementi (1gB!!!!!)
potrei decidere di lavorare su partizioni da 1kb
(che richiedono in totale 1mb)
e quindi poi effettuare i vari merge
Il tutto si fa in:
n*log_2 1k=10n
il merge sort effettua il tutto in:
n*log_2 1m= 20n
Un'altra cosa per ordinare strutture è di gran lunga consigliabileusare 
puntatori ad esse (nell'esempio modifichi la dimensione da 1gb a 4mb)
-- 
Strahd
per stupire mezz'ora basta un libro di storia,
io cercai di imparare la Treccani a memoria... [F.d.A.]
Newsgroup: it.comp.lang.c
Titolo: Emacs ed il bottone centrale.

Sara' una banalita' ma...
Ho installato emacs, e ho scoperto che al bottone centrale (quello della
rotella) ha assegnato il comando "incolla".
Ora mi capita spesso, purtroppo, di clickare inavvertitamente questo
bottone, e i risultati son spesso nefasti sui sorgenti che scrivo, cosi'
vorrei disabilitare la funzione, o quantomeno assegnare qualcos'altro al
tasto centrale del mouse.
Ho provato a guardare le opzioni ma.. mi sono perso.
C'e' qualcuno cosi' gentile da aiutarmi?

qualcos'altro al tasto centrale del mouse.
hmmmm.
Guarda, l`unica soluzione che mi viene in mente e` configurare X
dicendogli che hai un mouse a due bottoni. Oppure, per azzerare il
buffer del "clipboard", seleziona una riga vuota e deselezionala. Cosi`
se pasti per sbaglio, pasti una riga vuota.
Ciao.
[f/up su icol.iniziare]
-- 
void
<void> Pikkio: Baciami il sederino :)
<Pikkio> void: (___)(___) SMACK

     
Ctrl-x u
C:\>iao Angelo
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG


Oppure
Ctr + _
ovvero
Ctrl + Shift + -
Ciao,
Ema
Newsgroup: it.comp.lang.c
Titolo: Aiuto per allocazione dinamica!

Ciao a tutti,
ho un piccolo problema e spero che qualcuno possa aiutarmi.
Devo allocare dinamicamente un vettore di puntatori e ho
scritto questo codice che sembra funzionare:
   char **buffer;
/* calcolo count */
   if((buffer=(char **)malloc(sizeof(char) * (count+1 ))) ==NULL)
   {
      printf("Memoria esaurita");
      exit(1);
   }
while(1)
{
   i=0;
      while((c=getc(fp)) != EOF && c != '\n')
         temp[i++]=c;
      temp[i]='\0';
   if((buffer[j]=(char *)malloc(sizeof(char) * (i+2) )) ==NULL)
   {
      printf("Memoria esaurita");
      exit(1);
   }
      strcpy(buffer[j++],temp);
      if(c==EOF)
      {
         buffer[j]=NULL;
         break;
      }
}
In effetti sembra funzionare,pero' succede questo:
quando vado a visualizzare una per una tutte le stringhe con un ciclo
di printf("%s",buffer[i]);
spariscono le prime linee(su 360 di una prova che ho fatto sparivano
le prime 15).
La cosa strana e' che all'inizio ci sono correttamente(ho fatto dei
controlli),
poi ad un certo punto incominciano a sparire le prime linee.
Per esempio con un controllo che ho fatto con la prova su detta
sono riuscito a scoprire che la prima linea scompare quando viene
memorizzata nel buffer la 115,e poi a poco a poco spariscono anche le altre.
Chi sa spiegarmi tutto cio'?
Ho forse sbagliato nell'allocare il vettore di puntatori?
Grazie a tutti.
xi...@usa.net
p.s. ho fatto una prova mettendo sul primo malloc  ....(count +2000)
       ed il problema sparisce,ho provato con cifre piu' piccole tipo 10 ,
20
       e il problema rimane.

 buffer=(char **)malloc(sizeof(char) * (count+1 )) 
perche' sizeof(char) e (count+1) ??? ricordati che count, se usato in
questo contesto, rappresenta il numero di puntatori a caratteri per i
quali allocare lo spazio nello heap e quindi va scritto come :
buffer = (char**)malloc(sizeof(char*)*count);
Cioe' tu stai allocando dello spazio nella memoria heap per accogliere
un vettore di puntatori a caratteri.
Poi ogni buffer[i], con i da 0 a count-1, va a sua volta inizializzato
come
buffer[i] = (char*)malloc(sizeof(char)*L);
dove L e' la lunghezza della stringa da allocare.
Ti riscrivo il programma corretto usando il Borland C++ :
#include <stdio.h>
#include <alloc.h>
#include <string.h>
main()
{
  char **buffer, temp[200];
  FILE *fp;
  int i = 0, j;
  buffer = (char**)malloc(sizeof(char*)*500);  
/* alloca 2Kbyte sullo heap per i 500 puntatori */
 
  fp = fopen("miofile.txt", "rt");
  while (!feof(fp))
  {
    fgets(temp, 200, fp);
    buffer[i] = (char*)malloc(strlen(temp)+1);
    strcpy(buffer[i++], temp);
  }
  j = i;
  for (i = 0; i < j; i++)
    printf("%s",buffer[i]);
  return 0;
}
Pero' come puoi renderti conto anche tu, per usare un array di
stringhe devi comunque definire quante stringhe utilizzare (nel mio
caso 500).
Quindi per una vera allocazione dinamica, e' molto piu' appropriata
una _lista_ di stringhe.
Ciao
Andrea
------------------------------------------------
combatti anche tu il "nano scemo" :
http://www.geocities.com/Hollywood/Studio/6989
------------------------------------------------
Newsgroup: it.comp.lang.c
Titolo: Sincronizzazione Threads!

 detto che io debba fare il fiorista....  [Morgan]  <
Visitate il mio sito:
http://digilander.iol.it/Superpork

sufficientemente chiaro!
Si', ma fatelo su it.comp.programmare.win32.

Newsgroup: it.comp.lang.c
Titolo: [niub] scanf di stringhe piu` grandi del contenitore

Salve, se ho ad esempio:
        char stringa[4];
        scanf("%s",&stringa);
...i caratteri in piu` oltre il quarto che vengono digitati, dove 
finiscono che nell'array non ci stanno?
-- 
    Pardo
 
http://pardo.cjb.net
 
    ( BACKUP: 
http://pardo.tsx.org
 )

 finiscono che nell'array non ci stanno?
Overflow :)
Imposta la lunghezza massima del buffer:
char stringa[4];
scanf("%4s", stringa);
cosi`  verranno letti  al massimo  3 caratteri  (un posto  serve per  il
terminatore).
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