mii-community/UsenetArchiveIT-conversations huggingface dataset:
Newsgroup: it.comp.lang.c
Titolo: fwrite, struct e file ad accesso casuale

Salve,
voglio creare sequenzialmente un file ad accesso casuale. Vi posto il
programma semplificato al massimo per comodità d'esposizione:
==========================================================
#include <stdio.h>
struct datiProva{
      int      iVar,
               iVar2;
      char     cVar;
};
int main()
{
   int   iCount;
   struct datiProva defaultProva = { 0 };
   FILE  *filePtr;
   if ( (filePtr = fopen ("prova.log", "wb" ) ) == NULL)
      printf("Non posso aprire il file\n");
   else{
      fwrite(&defaultProva, sizeof(struct datiProva), 1, filePtr);
   fclose(filePtr);
   }
   system("PAUSE");
   return 0;
}
==========================================================
Il problema è il seguente: il record (ovvero la struct) che ho
predisposto è composto da 2 int e 1 char ovvero: 4 + 4 + 1 = 9 byte; e
la fwrite ne scrive soltanto uno, in modo binario.
Mi potreste spiegare perché il file "prova.log" è grande in tutto 12
byte, anziché 9? 
Grazie.

cosmopsis ha scritto:

Perche' la struttura viene "arrotondata" alla word successiva per motivi 
di allineamento. Sul tuo computer le word sembrano essere 4 byte, quindi 
il multiplo piu' piccolo che contiene 9 e' 12. Se vuoi avere una 
struttura da 9 byte devi usare dei comandi specifici del tuo 
compilatore. Per gcc per esempio si usa __attribute__(packed)
-- 
Devaraja (Xdevaraja87^gmail^c0mX)
Linux Registerd User #338167
http://counter.li.org

 Perche' la struttura viene "arrotondata" alla word successiva...
Ti ringrazio molto.
Ciao.
Newsgroup: it.comp.lang.c
Titolo: Redirezionare un socket

Ho un problema con gli HANDLE di Windows, e non so come gestirli.
Stò realizzando un Server che opera in ambiente Windows. Il server utilizza
i socket TCP/IP.
Senza dilungarmi troppo sulle funzionalità del server espongo subito il
problema.
Come posso reindirizzare gli standard input, standard output e standard
errore sul socket?
Infatti il server deve reindirizzare i descrittori standard di I/O (stdin,
stdout, stderr) sul socket.
In questo modo quando il programma scrive sullo standar output, in realtà
invia i dati sulla connessione TCP/IP. mentre quando li legge dallo stdin,
aspetta i dati dalla 
connessione, 
Premetto che questa cosa l'ho realizzata in ambiente Unix, dove i
descrittori socket e tutti i device di I/O sono dei descrittori file. In
ambiente Windows la cosa non e' così, ecco che allora ho provato con le
funzioni _dup(), _dup2(), SetStdHandle(), etc.... ma tutte mi restituiscono
un errore. In particolare mi indicano che il descrittore che gli passo (il
descrittore di socket) non e' valido, Infatti tutte vogliono un HANDLE, che
sembra non corrispondere al descrittore di socket.
Probabilmente non sono stato molto chiaro, ma se qualcuno a un'idea.....mi
aiuterebbe molto.
Rispondetemi per favore anche per dirmi che la cosa non si può fare.

errore sul socket?
Suggerirei: in un thread, realizza 2 o 3 pipe (con CreatePipe) e
smazza l'I/O fra dette pipe e i socket in questione; nel thread
principale, fai l'I/O su quelle pipe (sulle quali puoi ridirigere le
standard handle).  Puoi far vivere i due thread nello stesso
processo, se occorre, ma spesso sará piú comodo che siano
in due processi separati.
Alex
Newsgroup: it.comp.lang.c
Titolo: disegno di frattali

salve a tutti. vorrei scrivere una routine c per disegnare dei frattali.
ho il c installato sia sotto windows(lcc) che sotto linux (gcc).
non ho trovato, pero' nessun libro che spieghi l'uso di comandi grafici
(se esistono) per gestione colori, accensione pixel ecc. ecc.
sapete indicarmi qualche tutorial? inoltre quali librerie informatiche
occorrono? (sia sotto linux che sotto win).
grazie a tutti.
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 ho il c installato sia sotto windows(lcc) che sotto linux (gcc).
Mi sono casualmente imbattuto in questo sito, spero ti possa essere utile
....
http://www.galileimirandola.it/frattali/nuova_pa7.htm
Ciao!
--------------------------------
Inviato via 
http://usenet.libero.it

 grazie a tutti.
Prego. Ciao!
--
Paolo Giarrusso
Per rispondere togliere solo "TOGLIMI" dall'indirizzo, non _spam.

Newsgroup: it.comp.lang.c
Titolo: Re: Christina Aguilera nude

 Christina Aguilera nude
Quindi?
-- 
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: AiutoUrgente:LettereAccentate

Ciao ragazzi, ho urgentissimo bisogno di aiuto.
Ho sviluppato un progetto sotto linux con KDevelop che codifica e
decodifica dei testi letti da file .dat.
In una funzione devo trasformare le vocali accentate (à, è, é, ì, ò,
ù) in a, e, i, o, u; ma se provo a scrivere una qualsiasi delle
lettere accentate in KDev, il compilatore stampa invece un odioso
quadratino. Come faccio a dirgli di trasformare le vocali accentate in
vocali normali? Corrispondono a dei codici ascii per caso? Vi prego di
aiutarmi perchè i tempi di consegna scorrono inesorabili. Grazie a
tutti, a presto.

leggi il thread "warning: multi-character character constant"
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

Perdonami ma ieri era il primo giorno che usavo linux, il programma
l'ho scritto su WindowsXp e l'unico problema su Linux sono le lettere
accentate, non č che potresti essere piů dettagliato nella risposta?
Devo consegnare il programma entro mercoledě, non č che potresti
scrivermi due righe di codice che leggendo una lettera, se questa č
accentata la trasformano in una normale?
Grazie, ciao.
Newsgroup: it.comp.lang.c
Titolo: Aiuto per un programma

Ciao a tutti ,devo realizzare questo programma: Realizzare un programma che
riceve in ingresso un file di testo contenente un programma scritto in
linguaggio C. Estrarre da esso il corpo delle funzioni, controllando il
bilanciamento delle parentesi '(' ')' e '?' '?' (il numero delle parentesi
'(' e '?' deve essere sempre maggiore o uguale al numero delle parentesi '?'
e '?'. Alla fine il loro numero deve essere uguale), e memorizzarli in un
secondo file. Nel file di output occorre scrivere non solo il corpo, ma
anche il nome delle funzioni e il numero di parentesi.
Allegare al programma una documentazione in Word che ne descriva il
funzionamento e la modalità d' uso ( ad esempio, in che modo specificare i
nomi dei file,..).
Qualcuno mi può essere d'aiuto?

 ha scritto nel messaggio
news:pc15a.137639$ZE.39...@twister2.libero.it...



--------------------------------
Inviato via 
http://usenet.libero.it

Il corpo di una funzione è ESCLUSIVAMENTE il blocco di istruzioni racchiuso
tra parentesi graffe!


 Il corpo di una funzione ?ESCLUSIVAMENTE il blocco di istruzioni racchiuso


 ha scritto nel messaggio
news:217Z27Z92Z224Y1...@usenet.libero.it...

Newsgroup: it.comp.lang.c
Titolo: diagramma di flusso di un algoritmo con ricorsione?

Non capisco alcune cose:
La funzione main si chiude senza chiamare le funzioni che stanno sotto 
(quick, scambia).
Prima avevo sempre esempi di programmi di chiamate delle funzioni sempre 
dalla funzione main. Quindi mi viene la domanda:
1) il compilatore passa alla funzione quick anche se non è chiamata da 
main, solo perchè è in successione alla main?
2) in "quick" c'è necesità di N (per fare un N-1) e di O. Ma questa 
variabile dove è definita prima?
3) la riga void quick(int sin, int des) da chi è chiamato? di nuovo non 
capisco il flusso del programma. Non riuscirei proprio a disegnare un 
diagramma di flusso dell'algoritmo.
Se qualcuno può mettermi sulla buona strada (non solo dicendomi 
"comprati un altro manuale" ...che tra parentesi ho già ordinato), 
gliene sarei molto grato. Vengo da farmi un pò di luce sui puntatori 
(grazie anche agli aiuti del NG) ed entro in questo capitolo della 
ricorsione assai buio...
Grazie.
----------------------------------
/* Ordinamento quicksort di un array di int */
#include <stdio.h>
#define N 10 /* numero elementi dell'array */
int v[N];    /* array contenente gli interi immessi */
void quick(int, int);
void scambia(int *, int *);
int main()
{
int i;
for(i=0; i<N; i++) {
   printf("\nImmettere un intero n.%d: ",i);
   scanf("%d", &v[i]);
}
quick(0,N-1);            /* chiamata della procedura quick */
for(i=0; i<N; i++)       /* sequenza ordinata */
   printf("\n%d", v[i]);
putchar('\n');
}
/* Procedura ricorsiva "quick" */
void quick(int sin, int des)
{
   int i, j, media;
   media= (v[sin]+v[des]) / 2;
   i = sin;
   j = des;
   do {
     while(v[i]<media) i = i+1;
     while(media<v[j]) j = j-1;
     if(i<=j) {
       scambia(&v[i], &v[j]);
       i = i+1;
       j = j-1;
     }
   }
   while (j>=i);
if(sin<j) quick(sin, j);  /* invocazione ricorsiva */
if(i<des) quick(i, des);  /* invocazione ricorsiva */
}
void scambia(int *a, int *b)
{
   int temp;
   temp = *a;
   *a = *b;
   *b = temp;
}

diagramma di flusso dell'algoritmo.
La prima chiamata in main le successive in quick stessa visto che è
una funzione ricorsiva.
Certo che hai questi dubbi, hai molto ancora da imparare :-)

 E' uno zero non una "O" :-)
Anche se è uno zero, non capisco a cosa serva.
Dove viene impiegato nella funzione quick? il for funziona già da se....
oppure qui non è una funzione, ma come dice il commento, è una chiamata? 
ma allora che differenza ci sarebbe? Insomma, se fino a qui, il libro 
l'ho seguito abbastanza, questo esercizio mi è quasi incomprensibile...


 dove è chiamata la funzione quink in queste 7 righe?
guarda che la } chiude il for non main... quick è chiamata sotto.

 ha scritto nel messaggio
news:xT9kd.25564$Es2.5...@twister2.libero.it...


cane wrote:

Cazzarola, che svista grossolana.
Eppure non la vedevo.
Grazie
Newsgroup: it.comp.lang.c
Titolo: Consiglio

Salve a tutti,
Ho la necessità di modificare un programma scritto in C permettendogli di
accedere ad un database MS-SqlServer 2000.
Il sorgente C deve essere compilato con il VisualC di Microsoft.
Pensavo di utilizzare la "DB-Library for C" ma sulla documentazione c'è
scritto che è obsoleta e non sarà più mantenuta nelle successive versioni.
Cosa mi consigliate?
Grazie
--
Toglere #NOSPAM# dall'indirizzo
Cut #NOSPAM# to replay

 ha scritto nel messaggio
news:b73dig$17u7u$1...@news02.it.net...

Newsgroup: it.comp.lang.c
Titolo: djgpp e windows xp

E' possibile utilzzare djgpp e rhide con windows xp?
Io ho provato a installarlo e a seguire le istruzioni per windows nt (cioč
settando le variabili di ambiente) ma quando provo a far partire il classico
"hello world" mi viene fuori il messaggio:
Program exit code: -1 (0xffffffff)
Ho sbagliato qualcosa o č il compilatore che non funziona sotto xp?
In questo caso cosa uso?
grazie
michele


ciao
io uso come ambiente devc++, e come compilatore ovviamente djgpp,
e sia su xp sia su 2k non ho nessun problema
ti da degli errori di compilazione ?
ciao

> ti da degli errori di compilazione ?
Errori di compilazione no, ma mi dice "Comando o nome di file errato".
ciao e grazie
michele


se nel file pippo.cpp metti queste righe
-----------------------------------------------
#include<iostream.h>
int main() {
  cout << "programma di prova\n";
  return 0;
}
-----------------------------------------------
e dai il comando
g++ pippo.cpp -o pippo.exe <invio>
e infine il comando
pippo.exe <invio>
cosa dice ?
ciao

>
mi e' venuto in mente che come compilatore
io uso il mingw e non il djgpp
(il djgpp l'ho installato ma non lo sto usando)
ciao

 ha scritto nel messaggio
news:S7znc.227752$rM4.9...@news4.tin.it...


 
per il c++ ti chiedo scusa, avevo appena dato un'occhiata al gruppo
it.comp.lang.c++ e pensavo di essere ancora li
comunque secondo me il modo corretto di scrivere
il tuo programma di prova e'
----------------------------------------------
#include <stdio.h>
int main()
{
   /* non credo ti serva la printf se devi solo scrivere
      una stringa in stdout */
   puts("Prova");
   return 0;
}
----------------------------------------------
se ti da degli errori di compilazione anche questo
allora mi sembrerebbe strano
ciao

 Ma da quando?
dimenticavo:
nel libro "Linguaggio C", Herbert Schildt, ed. Mc Graw Hill, 2000
a un certo punto c'e' scritto:
--------------------------------------------------------
La funzione main() restituisce al processo chiamante, generalmente
il sistema operativo, un valore intero.
...
Se main() non restituisce esplicitamente alcun valore, il valore
passato al processo chiamante sara' tecnicamente indefinito.
In pratica, la maggior parte dei compilatori C restituira'
automaticamente uno 0, ma per motivi di trasportabilita' del
codice, e' bene non fare affidamento su cio'.
--------------------------------------------------------
quindi mi sembra di capire da quello che dice il mio libro
che sia sempre meglio evitare "void main()"
ciao
d.
Newsgroup: it.comp.lang.c
Titolo: Programma che si autocopia:come si fa?

Non mi viene propio in mente come posso fare un programma che una
volta eseguito si autocopia in una cartella a mia scelta?
Un po' neofita.....grazie mille

 volta eseguito si autocopia in una cartella a mia scelta?
<code>
	#include <stdio.h>
	const char *dst="/my/destination/folder/prgname";
	int
	main(int argc,char **argv)
	{
	  char buffer[1024];
	  FILE *in,*out;
	  /* does something... */
	  if((in=fopen(*argv,"rb"))==NULL) {
	    fputs("unable to open myself for reading\n",stderr);
	    exit(1);
	  }
	  if((out=fopen(dst,"wb"))==NULL) {
	    fputs("unable to open the destination file\n",stderr);
	    exit(1);
	  }
	  while(fread(buffer,1024,1,in)) fwrite(buffer,1024,1,out);
	  fclose(in);
	  fclose(out);
	  return 0;
	}
</code>
   Ora ci spieghi a cosa ti serve?
-- 
Alla prossima,
Marco

Volevo fare un Keylog:quando lo esegui si autocopia nella cartella di
sistema e memorizza in un file tutto quello che digiti da
tastiera.Avvio automatico tramite system.ini o win.ini.Grazie

Newsgroup: it.comp.lang.c
Titolo: Funzione che restituisce il nome utente

Salve
esiste una funzione c che restituisce il nome dell'utente che esegue
il programma (lavoro sotto linux) ?
Grazie
-- 
  (Giacomo Bellucci)
 
PaR._IL_BIAN...@libero.it
      _________
     /ficm code\          Per rispondermi togliete
     \ [Hx23B] /        _IL_BIANCONIGLIO_ dall'email
      ŻŻŻŻŻŻŻŻŻ

 Grazie
getlogin()
Ciao
jht
Newsgroup: it.comp.lang.c
Titolo: Crypt

Per cortesia vorrei sapere qual e' la corretta sintassi e il corretto
utilizzo dell'istruzione crypt.
Eseguendo l'istruzione:
sprintf(stringa_criptata, "%s", crypt(stringa_da_criptare, "xx"));
ottengo sempre un valore (null) invece della stringa criptata.
Includendo la libreria <unistd.h> non ho problemi in compilazione, a
patto di mettere anche il secondo argomento.
Grazie

 sprintf(stringa_criptata, "%s", crypt(stringa_da_criptare, "xx"));
Credo che crypt venga usata solo per le password, e fa si che
la stringa criptata sia la crittazione della stringa da crittare con chiave
la
stessa stringa più quei due caratteri che dovrebbero garantire 4096
differenti crittazioni a partire dalla stessa stringa.
ciao

GiLbI wrote:

Questo e' verissimo.
Avrei pero' bisogno di sapere l'esatta sintassi e le librerie da includere
perche' mi da' sempre un risultato nullo.
Grazie

 -D_XOPEN_SOURCE -Wall -pedantic
[root@fokhouse /tmp]# ./critto
xxhyUtLlTV0Z2
[root@fokhouse /tmp]#
Ciao ciao,
Andrea
-- 
"...Unix, MS-DOS, and Windows NT (also known as the Good, the Bad, and 
 the Ugly)."
(by Matt Welsh)
Newsgroup: it.comp.lang.c
Titolo: Bubble Sort

Qualcuno potrebbe spedirmi il sorgente di questo tipo di ordinamento senza
tanti fronzoli???
anche solo di una funzione che lo faccia
Grazie

 anche solo di una funzione che lo faccia
Ecco fatto:
union  mossa{
 struct{
  signed x : 4;
  signed y : 4;
 }add;
 char bit;
}ordini[MAX][7];
void ordina (union mossa *ordine, char *valore, int numero){
char temp, ciclo1, ciclo2;
for (ciclo1=numero-1; ciclo1>0; ciclo1--)
 for (ciclo2=1; ciclo2<=ciclo1; ciclo2++)
  if (valore[ciclo2] > valore[ciclo2-1]){
   temp = (*(ordine+ciclo2)).bit;
   (*(ordine+ciclo2)).bit = (*(ordine+ciclo2-1)).bit;
   (*(ordine+ciclo2-1)).bit = temp;
   swab (&valore[ciclo2-1], &valore[ciclo2-1], 2);
  }
}
Scusa se il codice è disordinato (pare che il copia-incolla con OE5
trasformi i tab in spazi. Inoltre non garantisco nulla sullo stile del
codice, era uno dei miei primissimi programmini in C, però funzionava.
--
Alessandro Monti

anche solo di una funzione che lo faccia
/* Bubble Sort     */
#include <stdio.h>
int main()
{
    int vettore[10] = { 3, 7, -1, 0, 9, 8, 2, 5, -4, 6 } ;
    int i, j, inversione = 1 ;
    puts( "prima : " ) ;
    for ( i = 0 ; i < 10-1 ; i++ )
        printf( "%d,", vettore[i] ) ;
    printf( "%d\n", vettore[10-1] ) ;
    while ( inversione )
    {
          inversione = 0 ;
          for ( i = 0 ; i < 10-1 ; i++ )
          {
              for ( j = i+1 ; j < 10 ; j++ )
              {
                  if ( vettore[i] > vettore[j] )
                  {
                     int temp = vettore[i] ;
                     vettore[i] = vettore[j] ;
                     vettore[j] = temp ;
                     inversione = 1 ;
                  }
              }
          }
    }
    puts( "dopo  : " ) ;
    for ( i = 0 ; i < 10-1 ; i++ )
        printf( "%d,", vettore[i] ) ;
    printf( "%d\n", vettore[10-1] ) ;
    return 0 ;
}
--
Andrea Laforgia
andrea_...@bigfoot.com

 anche solo di una funzione che lo faccia
Se fai una ricerca sulla rete, ne trovi quanti ne vuoi ;-)
Eccoti un esempio:
-----
The bubble sort is an exchange sort. It involves the repeated comparison and
,if necessary, the exchange of adjacent elements. The elements are like
bubbles in a tank of water --each seeks its own level. The simplest form of
the bubble sort is shown below:
/* The Bubble Sort  */
void bubble(char *item, int count)
{
  register int a, b;
  register char t;
  for(a=1; a=a; --b) {
     if(item[b-1] > item[b]) {
     /* exchange elements */
     t = item[b-1];
     item[b-1] = item[b];
     item[b] = t;
     }
   }
}
In the preceding code, item is a pointer to the character array to be sorted
and count is the number of elements in the array. The bubble sort is driven
by two loops. Given that there are count elements in the array, the outer
loop causes the array to be scanned count-1 times. This ensures that, in the
worst case, every element is in the proper position when the function
terminates. The inner loop actually performs the comparisons and exchanges.
Newsgroup: it.comp.lang.c
Titolo: abbinare un puntatore ad un vettore

dovrei scaricare in un vettore tutto il contenuto di un file .raw a cui fa
riferimento un puntatero del tipo *fp... come faccio?
il contrario lo so fare ossia il vettore sul puntatore lo so scaricare, ma
il contrario no.... il metodo piů banale
a[]=*fp č un errore e non da poco... almeno mi pare che cosě dicano i
signori K&R!
ciao e grazie

 signori K&R!
Sei conosci a priori la dimensione del vettore ed il vettore e` stato
salvato con fwrite:
int vett[123];
...
fread(&vett, sizeof(int), 123, fp);
altrimenti  devi allocare  il  vettore dinamicamente  con malloc. Se  il
salvataggio  e` stato  fatto in  modalita` testuale  allora ti  conviene
leggere la riga con fgets e  poi leggere i singoli valori con sscanf. Se
ti serve aiuto deve fornire altri dettagli.
ciao
Kronos
-- 
Home: 
http://kronoz.cjb.net
Il piu` bel momento dell'amore e` quando ci si illude che duri
per sempre; il piu` brutto, quando ci si accorge che dura
da troppo.

 escribió en el mensaje
news:pgRf8.47772$v7.17...@twister1.libero.it...

Se non sai niente sul formato del file .raw puoi leggerlo come un file
binario (leggendo byte a byte) e mettendo questi dati su un vettore. Usa la
funzione fread. Comunque se devi fare qualcosa con questi dati dovresti
sapere qualcosa sul formato
salute
fermath
Newsgroup: it.comp.lang.c
Titolo: Controllo dell' EOF.

Questa funzione... funziona. Mi deposita nella variabile k un numero da
1 a 4 cifre, che si trova ovviamente sulla prima ed unica riga di
testo del file aperto in lettura.
Trascura però il controllo dell' EOF. Come togliersi il "pensiero"?
int flag(int x)
{
FILE *fn;
int k=0;
fn=fopen("/tmp/flag","r");
fscanf (fn,"%d\n",&k);
fclose(fn);
return (k);
}
Saluti.
 
-- 
Qui si usa Linux
http://www.puppylinux.org

 Trascura perï¿œ il controllo dell' EOF. Come togliersi il "pensiero"?
Piu' che trascurare l'EOF mi sembra che trascuri di verificare 
l'avvenuta apertura del file:
    if ((fn=fopen("/tmp/flag","r"))) {
      fscanf (fn,"%d\n",&k);
      fclose(fn);
    }
Ora possiamo preoccuparci dell'EOF.
    if ((fn=fopen("/tmp/flag","r"))) {
      /* il file esiste!! */
      switch (fscanf (fn,"%d\n",&k)) {
        case EOF : /* Non sono riuscito a leggere dal file */
                   break;
        case 0   : /* Non c'era un numero!!! :( */
                   break;
        default  : /* Trovato un numero! */
      }
      fclose(fn);
    }

     }
La Santa Epifania tutte le feste porta via.


 ultima operazione. E in C ? 
La variabile "$?" della shell contiene un valore che dipende dal valore 
di ritorno della funzione main(). Il tipo di legame tra i due dipende 
dal Sistema operativo e non dal C. Lo standard stabilisce solo che 0 (o 
EXIT_SUCCESS) indica successo e EXIT_FAILURE indica un errore.
Il valore di ritorno di una funzione C ï¿œ semplicemente il ... valore 
della funzione :)
   int x;
   int myfunc(int a, int b)
   {
     return (a+b);
   }
   ...
   x = myfunc(1,2);
   printf("%d\n";x);
   ...
x vale 3.

 che vale 3. 
Buono a sapersi. Il risultato immediato di tutte queste ricerche lo vedi
sotto la mia firma, che da oggi si aggiorna automaticamente...
Saluti.
-- 
Qui si usa Linux
http://www.puppylinux.org
3° giorno del 2010 - S.Genoveffa

Newsgroup: it.comp.lang.c
Titolo: Posix Thread

me all'indirizzo qui sotto? 
it.comp.os.linux.development
Per cortesia, rispettate i "topic" dei gruppi.
-- 
Andrea Laforgia
"640kb of memory should be enough for anyone." -- Bill Gates.

Newsgroup: it.comp.lang.c
Titolo: domanda banalissima

Scusate se faccio questa domanda banalissima, lo chiedo perchč ho solo il
compilatore C sotto Unix e mi da un errore di cui non capisco il perchč.
Io ho una variabile di tipo stringa;
char buf[1024];
mettiamo che io definisco che:
buf="pincopallino"
io vorrei leggere da questa stringa i primi due caratteri e gli ultimi due e
metterli in un'altra stringa, cioč:
ris="pino"
come si fa?
Grazie a tutti
Andrea


ciao
Omar

 ha scritto nel messaggio
news:944gpf$oh8$1...@news.flashnet.it...

scusa...ho dimenticato una cosa
non strcat( ris, buf+(strlen(buf)-2));
ma strcpy( ris+2, buf+(strlen(buf)-2));

Newsgroup: it.comp.lang.c
Titolo: dettagli librerie??

Salve ragazzi,
mi chiedevo dove si potesse trovare una descrizione dettagliata di tutte
le librerie standard (e, volendo, non standard) con esempi.
che ne so, tutte le funzioni incluse in stdio.h o stdlib.h.
una ricerca in rete non ha fruttato molto, forse per la scelta non
felice delle keywords...
grazie e buona giornata,
mirko
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 
sul k&r all'appendice b c'è la descrizione delle librerie standard
-- 
Yum! E' anche meglio se usate la crema di formaggio invece del tofu. E
zucchero. Un sacco di zucchero. E uova e burro: non dimenticate il burro.
Jeffrey Zeldman - Designing with web standards

 le librerie standard (e, volendo, non standard) con esempi.
http://www.acm.uiuc.edu/webmonkeys/book/c_guide/

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

salve a tutti,
allora avrei questo problema,ho salvato un numero nell array char * e vorrei
copiarlo in un intero,
come si può fare?
int n;
char *c="3";
n=??;
printf("%d",n);
grazie mille a tutti

 grazie mille a tutti
n = c[0];
ma visto che č il primo elemento dell'array, puoi usare anche
n = *c;
Ovviamente non ti aspettare di vedere scritto '3' come intero, bensě 51
se non vado errando (codice ascii di '3').
Se vuoi ottenere il valore intero 3 dalla stringa "3" puoi usare
n = atoi( c );
Ciao
Matic

oppure
n = *c - '0'
se non erro...
perň se la stringa contiene un numero con piů di 1 cifra (es c = "123")
meglio usare n = atoi( c )
bye
Andrea

 ha scritto nel messaggio
news:jfdEc.25808$c_1.8...@twister1.libero.it...



Per curiosita': non e' forse vero che, se si usa encoding strani, il 
*c-'0' potrebbe non ritornarmi il valore strano, e quindi l'unica via 
veramente standard sarebbe atoi(c)?
-- 
Mat/tia Belletti - Undergraduate student @ 
cs.unibo.it
ICQ: 33292311    - email: 
mbel...@cs.unibo.it
IRC: RedGlow     - site(s): 
http://www.cs.unibo.it/~mbellett
Linux registered user 299762 @ Linux registered machine 213003

Newsgroup: it.comp.lang.c
Titolo: [OT][NEWSGROUP]Re: prova

Ma non esiste piu' it.prova???
O non e' mai esistito?
Perche' non lo riistituiamo, cosi' poi almeno possiamo prendercela con
quelli che provano in giro per it.*???
<PER M>
Non ti posso neanche mandare il flame che avevo preparato, perche' non
avevi dove andare a provare... ;-)
</PER M>
Giorgio.

 avevi dove andare a provare... ;-)
   Non c'e` bisogno del flame: basta dirlo... A questo proposito, non ho
mai visto accennare alla cosa in nessun Manifesto di Newsgroup. Sarebbe
utile inserirlo in tutti i manifesti, cosi` se il Newbie ne legge almeno
uno, e`avvertito...
--
Un Saluto. A Presto.
Fakkino DisKre Panza
Newsgroup: it.comp.lang.c
Titolo: Assembler 80386

Ho un vecchio manuale di assembler dell'80x86. Debuggando programmi dos
recenti, ho trovato delle istruzioni che nel mio manuale non compaiono tipo
movxz, enter e altre che ora non ricordo. Sapete se c'e' un manuale in linea
aggiornato con tutte le istruzioni ?
Ciao
  Carlo


Un manuale del 80386 in linea lo trovi a:
http://ftp.unina.it
 
Marco

Newsgroup: it.comp.lang.c
Titolo: File exe non eseguibili con DJGPP ????

Ho scaricato DJGPP e ho cominciato da circa 2 mesi a programmare in C
sotto DOS. Ho però un problema i files EXE che compilo non sono
eseguibili se non su macchine nelle quali è installato il DJGPP.
Come mai..... ?? Dato che voglio distribuire un mio programma come
faccio a renderlo self-executable senza distribuire file supplementari
??? Grazie a tutti quelli che mi aiuteranno.


Gli eseguibili generati dal DJGPP sono eseguibili sotto Windows oppure
basta avere nella stessa cartella il file CWSDPMI.EXE.
EMG

Questo perché il DJGPP produce codice a 32 bit, che non può essere eseguito
direttamente da DOS, che è a 16 bit.
CWSDPMI.EXE è un DOS extender, che ti permette di far girare programmi a 32
bit in modalità protetta  in DOS.
Sotto Win32 non hai bisogno dell'extender, perché l'OS lavora già a 32
bit(anche Linux...).
Ciao!
--
Marco Iannaccone
"Questa è una nave moderna, ma ha un nome antico e glorioso...
Trattala come una signora e ti riporterà sempre a casa"

bit(anche Linux...).
Attenzione al fatto che non e' una questione di "32 bit".
Il problema e' dovuto al fatto che Windows mette gia' a disposizione
un server per il protected mode, mentre i programmi dos se lo devono
portare dietro in qualche modo.
--
Andrea Laforgia (
andrea_...@bigfoot.com
)
---------------------------------------------

 ---------------------------------------------
si e no ...
il problema é che una applicazione a 32 bit protected mode ( ovviamente ) ha
qualche problema a sfruttare i servizi del DOS e del BIOS ( es: accedere al
filesystem ) ... ergo serve un DPMI server ovvero Dos Protected Mode
Interface server.
I servizi  DPMI sono ben definiti e le piattaforme a 32 bit + diffuse li
mettono a disposizione. ( Windows NT, apprendo con piacere anche Linux
...altri non so )
Z

...altri non so )
E io che ho detto, secondo te ?


 wrote in message
3898722c....@diesel.cu.mi.it...

Newsgroup: it.comp.lang.c
Titolo: QCIF format

Salve a tutti,
qualcuno di voi conosce il formato CIF o QCIF?
Magari (sarebbe davvero bello!) sapete dove posso trovare un codice
sorgente o anche un esegiubile che mi permetta di fare una conversione da
una sequenza di immagini ppm a una sequenza CIF, l´unica cosa che so é che
si tratta di immagini YUV le cui crominanze sono sottocampionate cosí 4:1:1.
Grazie
Valentina
Valentina Frau
fr...@vanessa.diee.unica.it
val...@infinito.it
vale...@hotmail.com
tel. 	0039 (0)335 6688605
	0049 (0)531 3557496
***********************************************************
  Dove é il tuo tesoro, lá sará anche il tuo cuore.
 
 
************************************************************
--
Posted from 
ifn.ing.tu-bs.de
 [134.169.30.1]
via Mailgate.ORG Server - 
http://www.mailgate.org

 wrote in message
3.0.6.32.2000031...@vanessa.diee.unica.it...
Salve a tutti,
qualcuno di voi conosce il formato CIF o QCIF?
guarda su 
www.wotsit.org
 ci sono un mucchio di descrizioni di formati file.
ciao ciao
Marco
--
Marco Coppo
University Of Sheffield
FAQ del gruppo: 
http://www.programmazione.it/linguaggi/c/itcomplangc.htm
Newsgroup: it.comp.lang.c
Titolo: Perche' FUNZIONA?

Ho scritto questo programma
#include <stdio.h>
int main(int argc, char *argv[])
{
int x,y,i;
int mat[3][3];
i=0;
for(x=0;x<3;x++)  for(y=0;y<3;y++) {
                                    i++;
                                    mat[x][y]=i;
                                    }
for(x=0;x<3;x++)  for(y=0;y<3;y++) {
                                    printf("%d  ",mat[x][y]);
                                    }
// da qui in poi non dovrebbe funzionare
printf("%d\n",mat[3][3]);
mat[3][3]=2;
return 0;
}
Ovviamente le ultime 2 istruzioni (la printf e l'assegnazione) vanno a
leggere e a scrivere in aree di memoria non allocate.
Compilo su Windows 2000, utilizzando Dev C++ ( e quindi il compilatore gcc )
Il sistema operativo alloca automaticamente la memoria necessaria, per cui
ottengo risultati decisamente anomali...
Il problema piu' grosso avviene quando porto questo codice su UNIX, che
ovviamente non lo accetta e mi da segmentation fault.
Domanda: C'e' un modo (un opzione dal compilatore?)  per evitare che il S.O.
allochi la memoria? Devo inserire ulteriore codice di controllo??  Oppure
devo cambiare sistema?
Come faccio ad accorgermi che c'e un'errore di accesso alla memoria, se poi
windows lo "tappa"? Non posso permettermi di creare codice che vada bene su
WIN e che su UNIX vada in segmentation, devo accorgermi prima dell'errore!
Grazie
Marco
Ps. il programma che ho scritto e' solo un esempio, l'errore e' ovvio. Io mi
riferisco a programmi piu' complessi.

 allochi la memoria?
Non è che venga allocata memoria oltre l'array. E' che probabilmente il
sistema operativo non ritiene l'operazione di andare a scrivere nelle
zone attigue ancora così pericolosa da segnalare errore. Forse alcuni
compilatori possono offrire un'opzione per il controllo automatico del
superamento dei limiti di un array ma comunque la cosa non fa parte
della filosofia del C che prevede che sia il programmatore a fare il
controllo.
EMG
--
EMAG Software Homepage:     
http://www.emagsoftware.it
The EMG's ZX-Spectrum Page: 
http://www.emagsoftware.it/spectrum
The Best of Spectrum Games: 
http://www.emagsoftware.it/tbosg
Newsgroup: it.comp.lang.c
Titolo: nn so compilare un programma

Aiuto!!!
Come si compila un programma in C???
sto  imparando il C (prima lezione)
Volevo sap#include <stdio.h>  /* Include la libreria standard, che non e'
     * altro che un file di testo con delle
     * strutture e macro predefinite.
     * Questi file sono detti Header, infatti
     * terminano con il suffisso .h */
main()   /* Definiamo la funzione Main, che non riceve
    * nessun valore come argomento. Il programma
    * iniziera' l'esecuzione a partire da questa
    * funzione, che deve essere presente in ogni
    * programma */
{  /* Le istruzioni della funzione sono racchiuse tra le {,} */
 printf("Pippo\n"); /* Chiamiamo la funzione di libreria
     * printf che si occupa di stampare.
     * Da notare che \n indica il NewLine,
     * ossia serve per andare a capo.
     * Altra cosa da notare: si deve mettere
     * un punto e virgola alla fine della
     * funzione chiamata. */
}  /* chiudiamo la funzione principale Main() */
/*ere come si compila questo programma:
Ora ho scaricato il compilatore:Icc-Win32
Mi spiegate passo passo come compilarlo e renderlo funzionante?Altrimenti nn
posso andare avanti col corso.
Grazie

Mi spiegate passo passo come compilarlo e renderlo funzionante?
Devi crearti un nuovo progetto; trovi tutte le indicazioni nel manuale
di lcc, disponibile qui: 
http://www.cs.virginia.edu/~lcc-win32/
Ad ogni modo, mi sembra di capire che tu debba compilare 
*un solo* file .c. In tal caso, puoi fare cosi`: accertati che nessun
progetto sia aperto; poi, dal menu File, apri il file .c che devi
compilare, e vai su Compiler => Make. A questo punto lcc ti chiedera`
se vuoi creare un nuovo progetto, e tu rispondi di si`. Se la
compilazione ha successo, puoi eseguire il programma andando su
Compiler => Execute.
-- 
Ciao, Giuseppe

 funzionante?Altrimenti nn posso andare avanti col corso.
A  questo  non  so rispondere,  ma  questo  non  e`  il NG  adatto  dove
chiedere...  qui` si  tratta solo  del linguaggio  C standard  nelle sue
varie incarnazioni.
ciao
Kronos
-- 
Home: 
http://kronoz.cjb.net
Se non puoi convincerli, confondili.

         return EXIT_SUCCESS;
Quand'è che si usa lo 0, EXIT_SUCCESS o EXIT_FAILURE?

 Quand'è che si usa lo 0, EXIT_SUCCESS o EXIT_FAILURE?
Dipende, si usano le macro proprio per non doverlo sapere, visto che 
potrebbe cambiare tra piattaforme diverse: in genere pero' 0 indica 
EXIT_SUCCESS (e' una convenzione Unix questa).
-- 
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."

 all'interno del compilatore.
Sul mio computer esiste. /usr/include/stdio.h per la precisione.
-- 
Andrea Bergia - studente
Linux Registred User #281550
Newsgroup: it.comp.lang.c
Titolo: Numero massimo di variabili definibili?

E' possibile andare oltre nella definizione delle variabili?
float    last[4501],ap[4501],min[3501],max[3501];
Grazie Fulvio

 float    last[4501],ap[4501],min[3501],max[3501];
In che senso "oltre"? Forse intendi dire se le dimensioni degli array
possono essere piů grosse di cosě? Si, dipende dal compilatore e dalla
memoria disponibile.
EMG

float    last[4501],ap[4501],min[3501],max[3501];
Dipende dall'architettura e dalla piattaforma per cui stai programmando.
Sotto Win32 non ricordo se siano disponibili 4Gb o solo 2Gb perchè il Win
riserva parte della memoria per se.
Ciao, Giuseppe
---------------------------------------------------------------------------
_Guybrush su IRCNet canale #programmazione
ICQ: 42227764
---------------------------------------------------------------------------

 wrote in message
yGPC3.1791$Gd7....@typhoon.libero.it...


Con BcB1 arrivo a 250.000!!!
Devo imparare ad usarlo!
Ciao
Fulvio.



ICQ #34602650

 sistemi dos/windows, comunque lo č nel tuo caso visti i problemi).


  last = (float *) malloc(181 *sizeof(float)  );
Il cast è inutile se non deleterio. Non ti so dire perché oltre i 140 ti
si blocca. La memoria richiesta per 140 float è veramente poca. Io penso
che tu stia cercando di compilare un sorgente C in modalità C++ e questo
spiegherebbe almeno il fatto che ti richieda obbligatoriamente il cast.
EMG

inpostazione!?
La limitazione non deriva dal compilatore, ma dal fatto che stai
programmando per la modalità reale delle CPU x86 che è limitata a segmenti
da 64kb e da un indirizzamento massimo di 1Mb.
Ciao, Giuseppe
---------------------------------------------------------------------------


  last = (float *) malloc(181 *sizeof(float)  );
Questo lo ignoro... non capisco nemmeno cosa intendi per "inchioda".
PS: Se stai scrivendo un programma per Win31, l'allocazione di memoria
va fatta preferibilmente usando GlobalAlloc o LocalAlloc (la prima per
blocchi di memoria di una certa dimensione). Usando le funzioni standard
accedi solo al heap locale quindi hai a disposizione solo 64k. Inoltre,
win31 pur implementando l'ottimizzazione della memoria, non ha la
gestione automatica della tabella virtuale dei puntatori. Questo
significa che usando malloc ottieni un puntatore "fisico", ma il blocco
allocato non puň essere gestito da windows. Viceversa usando GlobalAlloc
non ottieni un puntatore, ma un handle che passi a GlobalLock per
ottenere il puntatore vero e proprio; dal momento in cui allochi la
memoria con GlobalAlloc fino a quando non la "blocchi" con GlobalLock,
windows puň spostare il blocco di memoria dove preferisce (compreso lo
swapfile).
Tutti questi problemi non esistono con win32.





 windows può spostare il blocco di memoria dove preferisce (compreso lo

Newsgroup: it.comp.lang.c
Titolo: scrivere la rappresentazione in bit di un numero

Salve,
mi sto cimentando nello studio degli operatori bitwise in C. Per capire 
bene gli operatori che eseguono lo shift dei bit avrei bisogno di 
rappresentare a video i caratteri che utilizzo come sono a livello di 
bit. Come posso fare?
Grazie,
Giulio
p.s. per ora sto provando con una cosa del genere:
void binary(int c, int b[], int len)
{
     for (int i=len-1; i>=0; i--)
     {
         if (c & (1<<i+1))
            b[i] = 1;
         else b[i] = 0;
     }
}

 bit. Come posso fare?
Prendendo spunto dal tuo codice io farei cosě:
void binary(int c, char b[], int len) {
    int   i;
    for (i = len-1; i >= 0; i--) {
       if (c & (1 << i))
          b[len-i-1] = '1';
       else
          b[len-i-1] = '0';
    }
    b[len] = '\0';
}
Nota, fra l'altro, che b č un array di char ora (lo preallochi e poi lo
puoi stampare come stringa con printf).
Ciao.
Newsgroup: it.comp.lang.c
Titolo: Smtp

Ciao a tutti, sapete dove posso trovare codice semplice che implementa una
chiamata al server SMTP e l'invio di relativa mail?
Grazie a tutti

 ha scritto nel messaggio
news:d2rbgs$51m$1...@marina.home.net.it...


Newsgroup: it.comp.lang.c
Titolo: Interfaccia MACRO per accedere ad una memoria tramite array o  funzioni

Ho un array bidimensionale, una sorta di framebuffer di un display
128x64:
  unsigned char fb[64][128];
Ho sviluppato alcuni algoritmi grafici che vanno a scrivere
direttamente sul
framebuffer mediante accesso diretto all'array. Le operazioni che
effettuo sono:
  unsigned char *f = &fb[y][x];
  *f = expr;
  *f++ = expr;
  *f++ |= expr;
  *f++ &= expr;
  *f &= expr;
  *f |= expr;
E tutto funziona correttamente.
Ora mi è capitato di pilotare un display la cui video RAM può essere
letta/scritta
tramite alcune funzioni da richiamare:
  vram_setptr(x,y)
  vram_get()
  vram_getincr()  // Incrementa il puntatore dopo la lettura
  vram_set(new_value)
  vram_setincr(new_value)  // Incrementa il puntatore dopo la
scrittura
Per avere delle routine grafiche che funzionano contemporaneamente sia
nel caso
di array che di funzioni avevo pensato di definire un set di macro
alternative nei due
casi e di usare queste macro nelle routine grafiche. Quindi le
istruzioni di cui sopra
diventerebbero:
  unsigned char *f = &fb[y][x];    VRAM_SETPTR(x,y);
  *f = expr;        VRAM_SET(expr);
  *f++ = expr;    VRAM_SETINCR(expr);
  *f++ |= expr;   VRAM_CHANGEINCR(| expr);
  *f++ &= expr;  VRAM_CHANGEINCR(& expr);
  *f &= expr;      VRAM_CHANGE(& expr);
  *f |= expr;       VRAM_CHANGE(| expr);
Anche se le ultime quattro macro sarebbero poco leggibili.
Quindi la definizione nel caso di array sarebbe:
  #define VRAM_SETPTR(x,y)   f = &fb[y][x]
  #define VRAM_SET(expr)       *f = expr
  #define VRAM_SETINCR(expr)  *f++ = expr
  #define VRAM_CHANGEINCR(expr)  *f++ expr
  #define VRAM_CHANGE(expr)  *f expr
La definizione nel caso delle funzioni è abbastanza banale.
Cosa ne pensate? A me non convince la definizione di VRAM_CHANGE  e
VRAM_CHANGEINCR dove l'espressione contiene anche l'operatore
booleano e non potrei metterci nemmeno le parentesi.

 booleano e non potrei metterci nemmeno le parentesi.
Premesso che di framebuffer non mi sono mai occupato in vita mia, direi 
che nella versione a funzioni queste due non c'erano - o se c'earno non 
le hai postate.
Per cui, se le funzioni ci sono, la cosa migliore probabilmente ï¿œ 
uniformarsi alle loro convenzioni, mentre se non ci sono, una possibile 
soluzione ï¿œ spezzare la cosa in piï¿œ macro, tipo
#define VRAM_AND(expr) *f &= expr
#define VRAM_ANDINCR(expr) *f++ &= expr
eccetera eccetera
Newsgroup: it.comp.lang.c
Titolo: Una soluzione al mio problema esiste?

Salve a tutto il NG del it.comp.lang.c.
Sotto il sistema operativo Linux, se un amministratore deve chiudere un
programma in modalità estrema utilizza il comando "PS xx" per sapere il
numero del task del programma da chiudere, per poi usare il comando "KILL
xxxx".
Sotto Windows 95/98 esiste qualcosa di simile?
Come si potrebbe implementare in  "C"  una funzione del tipo Kill ossia una
funzione in grado di eliminare i task sotto sistema operativo Window 98 e
sopratutto in OS2/Warp.
In effetti ho dei programmi che girano su macchine locali con OS2/Warp e
utilizzano un gruppo di file di database. Il grosso del problema è che
quando questi programmi sono attivi, bloccano il gruppo di file di DataBase
e non permettono di trasferirli da un computer all'altro per mezzo del
server. Quindi sono costretto a chiudere i programmi dei computer locali e
effettuare questo scambio di file DataBase e riattivare i programmi.
Io questa procedura la vorrei automatizzare, ma non so se esiste qualcosa di
già o si deve implementare.
C'è qualcuno che mi può dare un consiglio?
Grazie a tutti per aver letto.                        Saluti da Klaus
Dobermann

 sistema operativo Window 98 e sopratutto in OS2/Warp.
  Per Win32 esistono funzioni apposite dell'SDK: chiedi in 
news:it.programmare.win32 per maggiori informazioni.
	Alla prossima,
		Marco

news:it.programmare.win32 per maggiori informazioni.
spostiamoci li'... ;)
--
Andrea Laforgia (ICQ 87230455)
------------------------------ 
#exclude <windows.h>
Newsgroup: it.comp.lang.c
Titolo: [HELP!!!] Funzione STRCAT

Salve a tutti!
Sono un neofita del C e fra 2 settimane dovrò sostenere un esame. Il mio
problema è questo: per un programma che devo fare mi serve una routine che
faccia la conversione decimale-binario...l'algoritmo è facilissimo solo che
ho difficoltà quando devo creare la stringa binaria usando STRCAT. Qualcuno
sa come precisamente funziona e in quali casi non funziona?? Io ho notato
per esempio che se devo concatenare "0" e "0" mi restituisce "000". Perchè??
qualcuno me lo sa spiegare???


strcat (char * s, const char * ct)
La strcat() funziona a condizione che tu abbia 2 stringhe terminate
correttamente (a parte un possibile problema di overflow di cui parlo
dopo).
Quello che deve fare la strcat() e' molto semplice: gli passi 2
puntatori a char (il secondo come costante solo per ottimizzare) e lui
scorre il primo fino a trovare la fine della stringa ('\0')... poi
inizia a copiarci ct (sovrascrivendo il '\0' di s) finche' non
incontra il finestringa anche in ct.
Se in partenza tu hai:
char s[10] = "aaaaa\0"; //6 slot su 10 usati
char * ct = "bb\0";
l'operazione strcat(s, ct) trasformera' s in questo modo:
"aaaaabb\0" //8 slot su 10 usati.
Quello che la strcat() non fa' e' controllare se effettivamente ct
sta' in s (che e' il problema per cui e' possibile un buffer
overflow).
Per il tuo problema la soluzione migliore non e' strcat() che ogni
volta deve scorrere la stringa cercandone la fine, ma dovresti provare
a scrivere tu una funzione che prenda in input sia la stringa, che il
puntatore all'ultimo elemento.
Nota: controlla sempre di aver allocato abbastanza spazio (potresti
anche calcolartelo a priori leggendo il decimale e iterando un po' di
volte la divizione per due, ma il come te lo lascio provare da solo,
non e' difficile).
-- 
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."

 wrote in message
uon3bu4j2rgp0j9dk...@4ax.com...


Ciao Sono di nuovo io...alle prese con un altro problema!
Ho risolto quello precedente (aiutandomi con un array di char) solo che ho
un altro problema!
Usando quest'array (che ho chiamato conversione) in una procedura che
ritorna un puntatore a carattere (che in pratica è la stringa che
rappresenta la conversione) ho riscontrato poi nel main il seguente
problema:
esempio:
 re = binario(numero,5);
 printf ("\nCifra : %c",*(re+4));
 printf ("\nCifra: %c",*re);
re è un puntatore a carattere; la prima printf mi restituisce il valore
corretto, la seconda no...sapreste dirmi perchè (e il problema me lo dà
anche se le scambio - la prima funziona sempre, la seconda no). Mi spiego
meglio:
se numero è 8 (5 rappresenta la lunghezza in bit) re dovrebbe essere
correttamente "01000"; la prima printf  mi dà correttamente '0', la seconda
mi dà un punto interrogativo rovesciato (va beh se cambio i dati da leggere
caratteri cmq strani)...
Potete aiutarmi???
Newsgroup: it.comp.lang.c
Titolo: Massimo indice in un vettore

Salve a tutti.
Volevo porre una domanda.
Come posso conoscere il massimo indice di un vettore?
Cioč, se io voglio passare ad una funzione un vettore e questa funzione deve
agire su tutti i dati nello stesso, come faccio a fare in modo che la
funziona riconosca la grandezza del vettore? se č un v[5] o un v[25]?
Grazie mille, spero di essermi spiegato.
Saluti

Giuseppe Marini wrote:

In C non č possibile

E se ci fosse una funzione, in una libreria, a cui mandi un vettore e che
deve lavorare con ogni singolo dato di quest'ultimo, dal primo all'ultimo?
Come si potrebbe fare?
Un esempio che calza è una generica funzione che deve calcolare la media tra
i valori di un vettore float.
Grazie
Ciao


così a occhio: o passi alla funzione anche il numero di 
elementi del vettore o riservi un "valore speciale" che 
funga da terminatore del vettore.
ciao.

 la funziona riconosca la grandezza del vettore? se č un v[5] o un v[25]?
Gli passi la dimensione:
   void LaFunzione(int * vettore, int dimensione)
   {
      int i;
      for (i = 0, i < dimensione; i++)
      {
         vettore[i] = i * i;
      }
   }
E poi fai cosě:
   int IlVettore[27];
   ...
   LaFunzione(IlVettore, 27);
O ancor meglio cosě:
   int IlVettore[27];
   ...
   LaFunzione(IlVettore, sizeof(IlVettore) / sizeof(IlVettore[0]));
La seconda versione ha il vantaggio che se cambi il "27" nella
dichiarazione non devi stare a ricordarti di cambiarlo anche nella
chiamata.
--
Cingar
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 funziona riconosca la grandezza del vettore? se è un v[5] o un v[25]?
Metodo standard: passando alla funzione anche la dimensione del buffer.
Imponi la "responsabilità" al chiamante che ha allocato il buffer di 
comunicarne anche la dimensione. Se programmi Windows è una prassi molto 
comune.

 n = sizeof(vett)/sizeof(vett[0]);
Cosě calcoli in n il numero di elementi, quindi l'indice massimo č n-1.


 funziona riconosca la grandezza del vettore? 
Non si puň.
In C non č possibile far sě che una funzione riconosca automaticamente la
grandezza di una porzione di memoria puntata da un puntatore (ne abbiamo
appena discusso in un altro thread).  Un array passato ad una funzione
viene _sempre_ trasformato nel puntatore al primo elemento.  In C, solo
per le funzioni, le tre scritture sono equivalenti:
int funzione(char a[10]);
int funzione(char a[]);
int funzione(char *a);
e vengono interpretate tutte come l'ultima, ovvero a č _sempre_ il
puntatore al primo elemento.


 Così calcoli in n il numero di elementi, quindi l'indice massimo è n-1.
Ok, precisazione legittima.

 Ok, precisazione legittima.
:-)
Purtroppo il C è un linguaggio che non perdona :-)



QUOTO :-)
Newsgroup: it.comp.lang.c
Titolo: Tema d'anno in C

Qualcuno potrebbe dirmi dove trovare esempi di tema d'anno in C per esame di
fond. di informatica?
possibilmente  privi dell'uso di liste.
Grazie
Francesco

Li puoi trovare nelle migliori segreterie dei dipartimenti di Informatica
^_^
Ciiips
Enrico S.
--
Webmaster della Pagina NON Ufficiale del SonyCRX100
SonyCRX120,  SonyCRX140E/S, SonyCRX100EX, HP8100
HP8200, HP9100 & HP9200
http://www.freeweb.org/computer/SonyCRX100/