在下面的虛擬實例中,我得到一個警告,我不明白我怎麼能擺脫它沒有明確定義一個指針與int *_str = (int*)str
:錯誤類型參數遞增
#include <stdlib.h>
#include <stdint.h>
void foo(void *str, int c, size_t n) {
for (size_t i = 0; i < n; i++)
*((int*)str++) = c;
}
這裏是我的得到gcc
:
gcc -c -std=c99 -Wpointer-arith test.c
test.c: In function ‘mymemset’:
test.c:7:20: warning: wrong type argument to increment [-Wpointer-arith]
*((int*)str++) = c;
^
我的代碼有什麼問題?
注意
我知道這個問題是非常相似,這one,但它並不能解釋爲什麼我不能這樣做,爲什麼我得到一個錯誤。
'++((int *)str ++)= c;' - >'*((int *)(str)+ i)= c;' – LPs
+++操作符的優先級高於cast 'int *'。但是*爲什麼*你想把這麼多東西塞進這麼幾個字?您是否參加了混淆的代碼競賽? –
@AndrewHenle我很好奇,我認爲使用第三個變量會給出更加混淆的代碼。 – nowox