2016-07-07 108 views
-4

此代碼的目的是傳遞十進制虛擬地址並輸出頁碼和偏移量。錯誤:間接尋址需要指針操作數('int'無效)

後,我編譯在Linux上使用gcc編譯我的代碼,我得到這個錯誤:

indirection requires pointer operand ('int' invalid) 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; 

} 

回答

1
virtualAddress = *atoi(argv[1]); 

atoi函數返回int(不int *因此沒有必要提領返回值)並且您嘗試解除引用int,因此編譯器會提供錯誤。

當你需要它unsinged long int使用strtoul -

char * p; 
virtualAddress = strtoul(argv[1], &p,10); 
+0

感謝。它的工作:) – azizoh

+0

@azizoh很高興幫助。 – ameyCU

+0

@azizoh - 如果ameyCU的答案解決了您的問題,您應該強烈考慮接受答案 – 4386427