Bonjour,
Ma question porte sur l'argv du main(). Je suis toujours sur la compréhension d'un code qui utilise des arguments puis stocke une partie de ceux-ci dans une structure dont un élément est un pointeur de type void.
Les arguments sont des chaines des caractères.
A un moment dans le code on passe par un switch() pour valoriser le pointeur. Dans un cas on passe directement l'argurment, dans un autre cas on passe une adresse.
Pourquoi l'adresse n'est-elle pas specifiée dans le cas de l'argument ?
UCHAR -> unsigned char
ULONG -> unsigned long
PVOID -> pointeur de type void
La structure
La partie du code
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 struct HWMCA_DATATYPE_S { UCHAR ucType; ULONG ulLength; PVOID pData; struct HWMCA_DATATYPE_S *pNext; };
En fait dans le switch pour le cas HWMCA_TYPE_OCTETSTRING on passe directement argv[i+1] à aHwmcaDataType[j].pData
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 int main(int argc, char *argv[], char *envp[]) { ---- typedef struct HWMCA_DATATYPE_S HWMCA_DATATYPE_T; HWMCA_DATATYPE_T aHwmcaDataType[10]; ULONG aulCmdData[10]; --- ---- switch (aHwmcaDataType[j].ucType) { case HWMCA_TYPE_OCTETSTRING: aHwmcaDataType[j].ulLength = strlen(argv[i+1])+1; aHwmcaDataType[j].pData = argv[i+1]; break; case HWMCA_TYPE_NULL: aHwmcaDataType[j].ulLength = 0; aHwmcaDataType[j].pData = (PVOID)NULL; break; default: aHwmcaDataType[j].ulLength = sizeof(ULONG); aulCmdData[j] = atol(argv[i+1]); aHwmcaDataType[j].pData = &aulCmdData[j]; break; } /* endswitch */ -- --- return (0) }
alors que dans le cas default on passe l'adresse de aulCmdData[j] à aHwmcaDataType[j].pData
Pourquoi cette différence ?
Partager