2017-02-01 42 views
-4

我有這個C++代碼。 我只拿到我關心的部分。 %s被使用的原因是什麼,它將顯示哪些信息作爲輸出? 我知道%s是用於字符串的,這很奇怪,因爲val的數據類型是整數。這成爲可能。整數類型變量中%s的輸出是什麼?

myClass::myFunc(USHORT & val){ 
    : (other codes not of importance) 
    updateVal(val); 
    printf("val = %s", value) 
} 

注:USHORT是unsigned int類型 的代碼是如此巨大而仍然不能驗證輸出,因爲我要編譯一個多小時。但我相信它沒有構建錯誤。

+5

這是一個bug =>未定義的行爲。 (糟糕 - 我收回了 - 'val'!='value' - 我們需要看到更多的代碼......) –

+1

代碼只是具有未定義的行爲。我認爲有一個人性的一般規律,即90%的事情是可怕的,所以如果你只是看一些隨機代碼或者閱讀一本隨機的書,你很可能會看到一些可怕的事情。 –

+5

其印刷'價值',而不是'val'和'價值'這裏沒有定義,因爲我們知道它可能是一個字符串 –

回答

4

%s在整型變量中的輸出是什麼?

這就是(C)標準說:

如果任何參數是不正確的類型對應的轉換規範,行爲是不確定的。

由於行爲未定義,輸出可以是任何東西。

爲unsigned int的正確的符是%u%o%x%X取決於所需的輸出中(十進制,八進制,十六進制或大寫十六進制),該基礎上。

究竟是爲什麼%S使用

只有程序的作者都知道,除非他們證明它的原因。我的猜測是這是一個錯誤。


PS。

注:USHORT是使用USHORT作爲unsigned int類型的別名無符號整型

避免。這是令人困惑的,並且代碼的讀者會期望它的無符號短代替。

+0

@BenjaminT感謝您的編輯。我只是盲目地複製一個說明符,完全忘記了輸出基礎。 – user2079303

相關問題