+ -
当前位置:首页 → 问答吧 → 全局变量的使用问题

全局变量的使用问题

时间:2010-07-30

来源:互联网

  1. struct ICS
  2. {
  3.         char *ilegalcharacters[8000];
  4. };
  5. struct ICS ics;
  6. int main ()
  7. {
  8.        memset(&ics, 0, sizeof(struct ICS));//这行到是正常
  9.      .........
  10.        if (pid2s=fork()!=0)
  11.         {
  12.             sttr();//数据进程
  13.         }
  14. }

  15. void sttr()
  16. {
  17.       ........
  18.         if(pthread_create(&tid,&attr,(void *)userinfo,act))
  19.          {
  20.                   perror("error userinfo");
  21.          }
  22. }


  23. void * userinfo(char* act)
  24. {
  25.                ............
  26.                 memset(ics->ilegalcharacters,'\0',200);
  27.                 strcpy(ics->ilegalcharacters,(char*)&tmp); //编译这行出错  为什么呢?
  28. }
复制代码
大概就是这个架构模式,编译的时候出现

错误:‘ics’ 未声明 (在此函数内第一次使用)


ics不是全局的吗?怎么这里访问不到?

作者: jd808   发布时间: 2010-07-30

本帖最后由 liwangli1983 于 2010-07-30 21:33 编辑

void * userinfo(char* act)没定义在struct ICS ics;前面?

不对,ics不是指针啊,成员引用应该用.而不是->

作者: liwangli1983   发布时间: 2010-07-30

话说你给ilegalcharacters分配空间了么?就memset

作者: liwangli1983   发布时间: 2010-07-30

我只是省掉了没些出来,现在是程序里认不到ics这个全局变量,去掉这个能编译通过,显然不是其他问题了

作者: jd808   发布时间: 2010-07-30

本帖最后由 zhangsuozhu 于 2010-07-30 22:05 编辑
  1. struct ICS
  2. {

  3.         char *ilegalcharacters[8000];

  4. };
  5. struct ICS ics;
复制代码
以上定义了一个全局变量ics, ics里的变量ilegalcharacters 是8000 个指向字符串的针指.注意是指向定符串的指针(顺便说一句。这个变量名也太长了)
  1. memset(ics.ilegalcharacters,'\0',200);   
复制代码
上面的意思是把ileaglcharacters中200个指向字符串的指针置0值。
  1. strcpy(ics->ilegalcharacters,(char*)&tmp);
复制代码
这句比较让人无法理解。把指向字符串的地址赋字符串的内容。编译器语法检查是不会通过的。而且如果真是楼主故意为之的话。应该写这样
  1. strcpy((char  *)(ics.ilegalcharacters),(char*)&tmp);
复制代码
我猜想这不是楼主的真思意:
也许楼主想这样:
  1. ics.ilegalcharacters[0] = strdup((char*)&tmp);
复制代码
或楼主结构定义错了。结构是这样的:
  1. struct ICS
  2. {

  3.         char ilegalcharacters[8000];

  4. };
  5. struct ICS ics;
复制代码
即ilegalcharacters 为可以存8000个字符的字符串

本人的只是猜想一下!呵呵

作者: zhangsuozhu   发布时间: 2010-07-30

本帖最后由 liwangli1983 于 2010-07-30 22:01 编辑

memset(ics->ilegalcharacters,'\0',200);
改成:
memset(ics.ilegalcharacters,'\0',200);

作者: liwangli1983   发布时间: 2010-07-30



QUOTE:
memset(ics->ilegalcharacters,'\0',200);
改成:
memset(ics.ilegalcharacters,'\0',200);
liwangli1983 发表于 2010-07-30 21:59




    说的对。我还真没看出来

作者: zhangsuozhu   发布时间: 2010-07-30



QUOTE:
说的对。我还真没看出来
zhangsuozhu 发表于 2010-07-30 22:02



我一开始也是......

因为很少直接定义struct类型变量,一般都是定义struct类型指针,所以看->都很习惯了......

作者: liwangli1983   发布时间: 2010-07-30

回复 liwangli1983


    定义8000个指针也比较怪异

作者: zhangsuozhu   发布时间: 2010-07-30



QUOTE:
回复  liwangli1983


    定义8000个指针也比较怪异
zhangsuozhu 发表于 2010-07-30 22:06




    呵呵,人家有需要嘛

作者: liwangli1983   发布时间: 2010-07-30

热门下载

更多