Het doel van deze code is om een virtueel adres in decimalen door te geven en het paginanummer en de offset uit te voeren.
Nadat ik mijn code heb gecompileerd met de gcc-compiler op Linux, krijg ik deze foutmelding:
indirection vereist pointer operand (‘int’ ongeldig)
virtualAddress = *atoi(argv[1]);
#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>
#include <unistd.h>
#include <math.h>
#include <curses.h>
int main(int argc,char *argv[])
{
unsigned long int virtualAddress,pageNumber,offset;
if(argc<2){
printf(" NO ARGUMNET IS PASSED");
return 0;
}
virtualAddress = *atoi(argv[1]);
//PRINT THE VIRTUAL ADDRESS
printf("The Address %lu contains:",virtualAddress);
//CALCULATE THE PAGENUMBER
pageNumber = virtualAddress/4096;
//PRINT THE PAGE NUMBER
printf("\n Page Number = %lu",pageNumber);
//FIND THE OFFSET
offset = virtualAddress%4096;
//PRINTS THE OFFSET
printf("\n Offset = %lu",offset);
getch();
return 0;
}
Antwoord 1, autoriteit 100%
Deze fout treedt op wanneer u een aanwijzer naar uw variabele wilt maken door *my_var
in plaats van &my_var
.
Antwoord 2, autoriteit 60%
virtualAddress = *atoi(argv[1]);
atoi
-functie retourneert int
(niet int *
dus het is niet nodig om de retourwaarde te verbreken) en u probeert om int
te dereferenteren, geeft de compiler daarom een fout.
Als je het nodig hebt in unsinged long int
gebruik strtoul
–
char * p;
virtualAddress = strtoul(argv[1], &p,10);