|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Dec 2002
Messaggi: 3359
|
[C]puntatori e **argv
Ho qualche problema coi puntatori, ecco il codice:
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 }
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? |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
'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.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Dec 2002
Messaggi: 3359
|
Se passo a test l'indirizzo di p(&p) poi come mi devo comportare in test?
|
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Dec 2002
Messaggi: 3359
|
Ah capito
Codice:
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 }
|
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Dec 2002
Messaggi: 3359
|
Codice:
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 }
|
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Perché sizeof di un puntatore dà 4 su un sistema a 32 bit (appunto puntatori a 32 bit).
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Dec 2002
Messaggi: 3359
|
ah...e come faccio a sapere se buffer è stato allocato correttamente e se è della dimensione da me voluta?
|
|
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
malloc o ha successo ed alloca gli N byte richiesti oppure fallisce e ritorna NULL. Non ci sono altre possibilità.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2780
|
Controlli se buffer!=NULL. Se non è riuscito ad allocare lo spazio da te richiesto ritorna sempre NULL
|
|
|
|
|
|
#10 |
|
Senior Member
Iscritto dal: Dec 2002
Messaggi: 3359
|
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: Codice:
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 }
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) Ultima modifica di MEMon : 05-03-2008 alle 18:13. |
|
|
|
|
|
#11 |
|
Senior Member
Iscritto dal: Dec 2002
Messaggi: 3359
|
Non è che buffer viene svuotato dalla read se si raggiunge l'end-of-file?
|
|
|
|
|
|
#12 |
|
Senior Member
Iscritto dal: Dec 2002
Messaggi: 3359
|
Sono un asino, con il seek mi sposto alla fine senza poi rimetterlo all'inizio...
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 14:39.




















