J'essaie d'accomplir ce qui suit: donné la fonction: int f(void *p)
prendre le premier octet de p et l'extrait comme un personnage. Ensuite, en fonction de ce que ce caractère est de déterminer quels octets supplémentaires à extraire en tant qu'intentions courtes. Par exemple, si j'ai un certain caractère c, extraire les octets 4 et 7 comme des nombres courts et les stocker dans des variables séparées; si j'ai un certain caractère différent d extraire les octets 3, 4, 5 et les stocker comme des variables séparées. Avec cette information, exécutez un autre code non pertinent. J'ai lutté avec ça pendant des heures.extrait d'un caractère et divers ints court du même pointeur vide dans C
J'ai essayé les éléments suivants:
int f(void *p) {
char *first = &p;
short int *third = p + 2;
short int *fifth = p + 4;
short int *seventh = p + 6;
printf("%s %s %s, %s", first, third, fifth , seventh);
}
int main(int argc, char const *argv[]) {
char test[] = "*5431234567";
f(test);
}
Mon résultat: ▒▒ς -1295010922 -1295010920, -1295010918
attendu: * 4 1 3
Après un certain temps je me suis rendu J'essayais de décoder un pointeur vide qui ne fonctionne pas. J'ai donc essayé de lancer:
char* c = (char*) p;
char first = (char) (*c)
printf("%s", first);
Cela m'a donné un défaut seg.
J'ai essayé des choses similaires avec le court métrage int sans résultat. Si c'est une question un peu noobish je m'excuse. Je suis nouveau à C et tout le concept des pointeurs et des références est nouveau pour moi. Ma première langue était Java, qui est beaucoup plus indulgent.
Vous ne pouvez pas effectuer d'opérations arithmétiques sur un pointeur 'void'. – jxh
Pourquoi ne pas avoir 'f' juste prendre un paramètre' char * ', puisque c'est ce que vous lui passez? – aschepler
Formellement, vous ne pouvez pas faire d'arithmétique sur un 'void *'. Malheureusement, GCC n'applique pas cela, et traite un «void *» comme étant à peu près équivalent à un «char *» quand il s'agit de l'arithmétique du pointeur, –