⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 token.c

📁 检查C/C++源程序中的可能错误和容易遭受弱点攻击的地方
💻 C
字号:
/* token.C * John Viega * * Jul 28, 1999 (with some mods in Jan 2000) */#include "token.H"TokenContainer::TokenContainer() {  increment = DEFAULT_TOKEN_CONTAINER_UNIT;  list = new Token*[increment];  if(!list)    OutOfMemory();  current_size = 0;  current_capacity = increment;}TokenContainer::TokenContainer(int incr){  increment = incr;  list = new Token*[increment];  if(!list)    OutOfMemory();  current_size = 0;  current_capacity = increment;}void TokenContainer::Add(Token *t){  if((t->GetTokenType() == STRING) && current_size &&      (list[current_size-1]->GetTokenType() == STRING))    {      int newlen = ((StringTok *)t)->GetContentLength() +	    ((StringTok *)list[current_size-1])->GetContentLength() + 1;      char *buf = new char[newlen];      /* ITS4: ignore sprintf */      sprintf(buf, "%s%s", ((StringTok *)list[current_size-1])->GetContents(),	      ((StringTok *)t)->GetContents());      delete t;      t = list[current_size-1];      // TODO: keep track of the token's EXTENT when it spans lines.      list[current_size-1] = new StringTok(buf, newlen-1, t->GetLineNo());      delete t;      return;    }  list[current_size++] = t;  if(current_size == current_capacity)     {      Resize();    }#ifdef ITS_DEBUG  // For debugging the token stream.  fprintf(stderr, "%s\n", t->GetRepr());#endif}Token* TokenContainer::GetToken(int i){  if(i >= current_size || i < 0) return 0;  return list[i];}void TokenContainer::Resize(){  Token **tmp = new Token*[current_capacity+increment];  if(!tmp)    OutOfMemory();  for(int i=0;i<current_capacity;i++)    {      tmp[i] = list[i];    }  current_capacity = current_capacity + increment;  delete[] list;  list = tmp;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -