2017-06-03 39 views
-2

我寫代碼:Ç - ULL前綴,十六進制

int main() 
{ 
    long long a = 1a1b2a2b3a3b4a4b; 
    long *p1; 
    long *p2; 
    long *p3; 
    long *p4; 
    *p1 = 1a1b; 
    *p2 = 2a2b; 
    *p3 = 3a3b; 
    *p4 = 4a4b; 

    *p1 = &p2; 
    *p2 = &p3; 
    *p3 = &p4; 

    printf("Die folgende Zahl : %11x", &p1, &p2, &p3, &p4); 
} 

,並得到這個錯誤:

invalid suffix "1a1b2a2b3a3b4a4b" on integer constant

可以在任何一個幫助什麼我的錯?

+0

您應該添加六角前綴來告訴編譯器,該數字是十六進制格式,而不是小數。 – lpares12

+3

試試'0x1a1b2a2b3a3b4a4b'。 – Yunnosch

+1

歡迎來到StackOverflow。 請參加[旅遊]。 格式會有幫助。 – Yunnosch

回答

1

雖然你沒有解釋你在這段代碼中想做什麼,但我會試着給你一個簡單的解釋,說明你爲什麼會得到這個錯誤。

您正在聲明類型爲long long的變量並將其賦值爲1a1b2a2b3a3b4a4b。通常,當您爲變量賦值時,應該輸入十進制值,正如您所見,1a1b2a2b3a3b4a4b不是十進制。

首先,在Ubuntu使用cc編譯,則返回錯誤:

invalid suffix "a1b2a2b3a3b4a4b" on integer constant

注意,第一1未示出。

將值分配給類型爲long的變量時,編譯器需要整數字面量(或整數字面量+後綴L,用於long)。你的問題在於編譯器將第一個1理解爲一個整數字面量,將a1b2a2b3a3b4a4b理解爲後綴。由於這個後綴不存在,你會得到錯誤。

我假設你要做的是將十六進制值1a1b2a2b3a3b4a4b分配給變量a。如果這就是你想要做的,你應該指定你輸入的值是十六進制的。做到這一點的方式,是值前添加前綴0x,所以它看起來像這樣:

long long a = 0x1a1b2a2b3a3b4a4b; 

有上有效的整數文本here更多信息。

無論如何,你的代碼中還有很多其他的錯誤,比如在指定指針指向什麼之前,指針指向什麼值。

+0

'0x'是一個前綴。後綴在最後。 – Yunnosch

+0

@Yunnosch謝謝,完全不是我的一天。 – lpares12

+0

您想刪除非C語法反引號嗎?並加入一個';'完成一個完整的陳述/初始化並刪除'''。 – Yunnosch

0

在分配一個十六進制值的變量,你需要0x前綴它 - 這樣的:

long long a = 0x1a1b2a2b3a3b4a4b; 

但是,最糟糕的是這樣的:

long *p1; 
..... 
*p1 = 1a1b; // note: should be 0x1a1b 

在這裏定義一個指針p1,然後爲該指針指向的內存分配一個值。這是一個巨大的錯誤,因爲指針未初始化,即不是指向任何合法的內存。

您需要先分配內存,例如:

long *p1 = malloc(sizeof(*p1)); 
*p1 = 0x1a1b; 
.... 
free(p1); 
+0

非常感謝您的反饋,我剛剛開始學習關於C.你會不會解釋ULL是如何工作的,它應該如何在代碼中加以應用? – Roman

+0

ULL是一個長簽名的錯誤後綴 – Yunnosch

+0

如果你開始談論缺點,那麼問題並不明確地問一路獲得免警告編譯。 – Yunnosch