赋值从指针目标类型中丢弃限定符

时间:2014-03-18 15:56:28

标签: c

我收到此警告:

warning: assignment discards qualifiers from pointer target type

问题是,symbolP不是const。我不想每次都在循环中创建const char *symbolP。 我怎样才能以更好的方式解决它。 这里是片段:

int getList(OCI_Connection* cn)
{
  OCI_Statement* st;
  OCI_Resultset* rs;
  char *symbolP;

  char *query ="SELECT ..";

  st = OCI_StatementCreate(cn);
  OCI_ExecuteStmt(st, query);
  rs = OCI_GetResultset(st);
  while (OCI_FetchNext(rs))
  {
      //here comes the warning:
      symbolP = OCI_GetString(rs,1);
  }
  return 1;
}

2 个答案:

答案 0 :(得分:5)

使用const char *symbolP没有任何问题,并且效率低于使用char *symbolP。此外,指针仍可分配:

  • const char * =指向常量char
  • 的非常量指针
  • char * const =指向非常量char
  • 的常量指针
  • const char * const =指向常量char
  • 的常量指针

现在,如果你没有显示的代码实际修改了指向的字符串,那么这是一个错误,你需要先制作一个可修改的副本。这也是使用正确的const char *指针的一个很好的理由:您将得到正确的错误。

答案 1 :(得分:0)

修复它的最佳方法实际上是在循环中声明一个const,如果它返回OCI_GetString

但是,这取决于您要对此数据执行的操作。如果您只想显示它,可以直接在OCI_GetString中使用printf

另一种解决方案:如果您事先知道OCI_GetString返回的字符串的大小,也许您可​​以尝试在memcpystrcpy中使用相同的缓冲区循环。