2012-07-11 98 views
0

我一直在努力編寫一些預處理宏,在C幫助我的工作。宏功能指針問題

  # define printSTRING(s) printf(# s " has the value"); \ 
         for(; *s != '\0'; s++) \ 
         printf(*s); \ 
         getch(); 

我收到錯誤:C2105: '++' needs l-value

當我打電話printSTRING(Payload);其中Payloadchar Payload[] = "wjdoidnjdeioejneiodejndo";

我認爲它沒有看到Payload作爲一個字符指針,但我不知道如何解決這個問題。

+0

預處理程序沒有指針等的概念,它只是替代和擴展宏。找出這個宏擴展到什麼地方(如果你使用GCC,使用'-E'標誌)。 – 2012-07-11 20:13:03

+3

數組不是指針。 – 2012-07-11 20:13:56

回答

4

這不是他們唯一的錯誤,你會得到。您可能希望使用putchar()代替,該參數需要一個參數charprintf()需要char *格式字符串,您不會給它)。或者,您可以使用puts()打印整個字符串(在這種情況下,您無需自己編寫循環)。

您收到錯誤的原因是Payload數組的名稱,而不是指針。你不能「增量」一個數組,儘管你可以像使用數組的名字一樣指向數組的開始。

+0

非常感謝,我不知道puts函數... derp。 – Recurrsion 2012-07-11 20:27:54

+0

您也可以使用'putchar()'(http://pubs.opengroup.org/onlinepubs/007904875/functions/putchar.html)。這是別名:'putc(c,stdout)' – Jack 2012-07-11 23:23:24

+1

@Jack:你說的很對,我的意思是'putchar()'而不是'putch()'。我會解決這個問題。 – 2012-07-11 23:28:36

3
  1. 您在濫用printf - 這就是'%s'格式說明符在這裏的原因。
  2. 'Payload'未被聲明爲char 指針但是作爲char array - 您無法修改數組的地址。使用簡單

    #define printSTRING(s) printf("%s has the value %s", #s, s) 
    

代替。