View Full Version : [C]puntatori e **argv
Ho qualche problema coi puntatori, ecco il codice:
1 #include <stdio.h>
2 #include <stdlib.h>
3
4 void test(char *args[], char *p){
5 p=args[1]; //args[1] dovrebbe essere un char *
6 }
7
8 main(int argc, char *argv[]){
9 char *p;
10 test(argv,p);
11 printf("%s\n",p);
12 }
Mi stampa delle schifezze e non quello che gli passo.
Non riesco a capire... p e un char *, args è un array di char * quindi args[n] è un char *.
p=args[1] è un char *=char * dovrebbe andare no?
Mi stampa delle schifezze e non quello che gli passo.'p' nel main è un puntatore non inizializzato (cosa contiene non si sa ... spazzatura). Alla funzione test() passi una copia del valore del puntatore. Ciò che assegni a 'p' in test non ha alcuna influenza su 'p' del main.
Se passo a test l'indirizzo di p(&p) poi come mi devo comportare in test?
Ah capito
1 #include <stdio.h>
2 #include <stdlib.h>
3
4 void test(char *args[], char **p){
5 *p=args[1];
6 }
7
8 main(int argc, char *argv[]){
9 char *p;
10 test(argv,&p);
11 printf("%s\n",p);
12 }
Azz che roba...
1 #include <fcntl.h>
2 #include <stdio.h>
3 #include <stdlib.h>
4
5
6
7
8 main(int argc, char *argv[]){
9 char *buffer;
10 buffer=(char *)malloc(80);
11 printf("%d\n", sizeof(buffer));
12 }
Mi da sempre 4, che credo sia la dimensione di NULL, infatti malloc sotto unix ritorna NULL se qualcosa va storto...ma cosa può essere andato storto?
Mi da sempre 4Perché sizeof di un puntatore dà 4 su un sistema a 32 bit (appunto puntatori a 32 bit).
ah...e come faccio a sapere se buffer è stato allocato correttamente e se è della dimensione da me voluta?
ah...e come faccio a sapere se buffer è stato allocato correttamente e se è della dimensione da me voluta?malloc o ha successo ed alloca gli N byte richiesti oppure fallisce e ritorna NULL. Non ci sono altre possibilità.
wingman87
05-03-2008, 17:04
Controlli se buffer!=NULL. Se non è riuscito ad allocare lo spazio da te richiesto ritorna sempre NULL
Ok capito, quindi non c'è modo di vedere quanto spazio occupa un array allocato dinamicamente.
Comunque, come mai questo codice non fa quel che deve:
1 #include <fcntl.h>
2 #include <stdio.h>
3 #include <stdlib.h>
4
5 main(int argc, char *argv[]){
6 char *buffer;
7 int nr=0;
8 int l=lseek(0,0L,SEEK_END);
9 buffer=(char *)malloc(l*sizeof(char)+1);
10 if(buffer==NULL){
11 printf("Impossibile allocare lo spazio per il buffer\n");
12 exit(1);
13 }
14 nr=read(0,buffer,l);
15 printf("%d_standard input[%d]:%s\n", nr,l,buffer);
16 }
In teoria dovrebbe leggere lo standar input e metterlo nel buffer, ma buffer mi sembra rimanga vuoto perchè mi stampa solo questo: "0_standard input[5]:".
ps.test.exe è il file compilato e lo invoco così: ./test.exe<prova dove prova è un file che contiene la stringa "ciao"(con anche il terminatore \0)
Non è che buffer viene svuotato dalla read se si raggiunge l'end-of-file?
Sono un asino, con il seek mi sposto alla fine senza poi rimetterlo all'inizio...
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.