宏功能指针问题

时间:2012-07-11 20:10:27

标签: c macros c-preprocessor

我一直致力于在 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作为char指针,但我不知道如何解决这个问题。

2 个答案:

答案 0 :(得分:4)

这不是他们唯一会得到的错误。您可能希望改为使用putchar(),这需要一个char参数(printf()采用char *格式字符串,您不会给它。或者,您可以使用puts()打印整个字符串(在这种情况下不需要自己编写循环)。

您收到错误的原因是Payload数组的名称,而不是指针。虽然您可以使用数组的名称,就好像它是指向数组开头的指针一样,但您不能“递增”数组。

答案 1 :(得分:3)

  1. 你在滥用printf - 这就是'%s'格式说明符在这里的原因。
  2. 'Payload'未声明为char 指针,但作为char 数组 - 您无法修改数组的地址。简单地使用

    #define printSTRING(s) printf("%s has the value %s", #s, s)
    
  3. 代替。