我收到此警告:
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;
}
答案 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
返回的字符串的大小,也许您可以尝试在memcpy
或strcpy
中使用相同的缓冲区循环。