此代码的目的是传递十进制的虚拟地址并输出页码和偏移量。
在Linux上使用gcc编译器编译代码后,我收到此错误:
间接需要指针操作数('int'无效) 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;
}
答案 0 :(得分:1)
virtualAddress = *atoi(argv[1]);
atoi
函数返回int
(不是int *
,因此无需取消引用返回值)并尝试取消引用int
,因此,编译器给出错误。
您需要unsinged long int
使用strtoul
-
char * p;
virtualAddress = strtoul(argv[1], &p,10);
答案 1 :(得分:0)
当您想通过*my_var
而不是&my_var
创建指向变量的指针时,就会发生此错误。