#define StringAddCount(e) if(e != '\0') i++
int Contacts::Add(Contact *c,int Size)
{
int i = 0;
StringAddCount(c->BanGonDiZi[0]);
StringAddCount(c->BoMen[0]);
StringAddCount(c->DianZhiYouJie[0]);
return i;
}实际运行的时候程序就出错了。请专家来解答,要怎么样定义谢谢。

解决方案 »

  1.   

    还有另一种写法,同样:#define StringAddCount(e) if(e[0] != '\0') i++
    int Contacts::Add(Contact *c,int Size)
    {
    int i = 0;
    StringAddCount(c->BanGonDiZi);
    StringAddCount(c->BoMen);
    StringAddCount(c->DianZhiYouJie);
    return i;
    }
      

  2.   

    估计是传入的指针不对吧。。
    我在DLG中测试以下代码是成功的阿
    #define StringAddCount(e) if(e != '\0') i++
    void CtestDlgDlg::OnBnClickedButton1()
    {
    // TODO: 在此添加控件通知处理程序代码
    struct CCCC
    {
    char test1[1];
    char test2[1];
    char test3[1];
    };
    CCCC c;
    c.test1[0]= '1';
    c.test2[0]= '1';
    c.test3[0]= '1'; CCCC * test = &c; int i = 0;
    StringAddCount(test->test1[0]);
    StringAddCount(test->test1[0]);
    StringAddCount(test->test1[0]);
    return;
    //return result;}
      

  3.   

    连接字符要用 ##, 以下是正确的写法:
    #define StringAddCount(e) if(e##[0] != '\0') i++
    int Contacts::Add(Contact *c,int Size)
    {
    int i = 0;
    StringAddCount(c->BanGonDiZi);
    StringAddCount(c->BoMen);
    StringAddCount(c->DianZhiYouJie);
    return i;
    }
      

  4.   

    楼上 sgnaw(李逍遥) 正解,谢谢大哥。