2012-07-11 82 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) 
    

代替。