6
以複數我很驚訝串加上布爾具有三元操作類似的效果:常量字符串以及布爾在C
int apple = 2;
printf("apple%s\n", "s" + (apple <= 1));
如果apple <= 1
,它將打印蘋果。爲什麼這個工作?
以複數我很驚訝串加上布爾具有三元操作類似的效果:常量字符串以及布爾在C
int apple = 2;
printf("apple%s\n", "s" + (apple <= 1));
如果apple <= 1
,它將打印蘋果。爲什麼這個工作?
因爲條件的計算結果爲0或1,並且字符串"s"
只包含0結束符之前的一個字符。因此如果bool
爲假,則"s" + bool
將評估爲"s"
的地址,並且對於其後的一個字符,如果結果爲0,則終止地址。
這是一個很酷的黑客攻擊,但是千萬不要認真使用這樣的代碼。
啊,我看...謝謝 – Oxdeadbeef