[英]how initialize char* const argv [] in c++
API函数接受类型为'char * const argv []'的参数我在我的c ++应用程序中初始化这种类型的参数,如:
char* const argv[] = {"--timeout=0", NULL};
并将参数传递给API函数,如:
Spawner spawner;
spawner.execute (argv, true);
使用g ++编译器,我得到以下错误:
error: deprecated conversion from string constant to 'char*' [-Werror=write-strings]
我怎样才能摆脱上述错误?
下面是API中执行函数的声明:
void Spawner::execute (char *const argv[], bool bShowChildWindow)
除了禁用基础警告的-Werror
或完全禁用警告之外,您可以执行以下操作:
char arg0[] = "--timeout=0";
char* const argv[] = {arg0, NULL};
在这种情况下,字符串用作数组初始值设定项; 没有指向它的指针。
是的,C ++对const chars很严格(但是正确)严格。 试试这个
char timeoutString[] = "--timeout=0"; // make a non-const char array
char *argv[] = { timeoutString, NULL };
Spawner spawner;
spawner.execute( argv, true );
从技术上讲,问题在于execute
方法的声明,应该是
void Spawner::execute (const char *const argv[], bool bShowChildWindow)
假设execute
不修改字符串或数组。
char* const argv[] = {"--timeout=0", NULL};
将argv
声明为char
的const
指针数组。 它不是指向const
char的指针。
您可以在更简单的语句中看到错误:
char* s = "foo";
这可以通过使用以下之一来解决:
char const* s = "foo"; // Points to the read-only memory
char* s[] = "foo"; // Makes a copy of the read-only memory
您需要的argv
是以下之一:
char argv1[][50] = {"--timeout=0"};
char* argv[] = {argv1[0], NULL};
要么
char argv1[] = "--timeout=0";
char* argv[] = {argv1, NULL};
并将argv
传递给Spawner::execute
。
如果您不希望编译器使用这些生成错误,则可以使用-Wno-write-strings
。 但是,如果你这样做,你将会在薄冰上行走。 您最终可能会意外修改只读内存并导致未定义的行为。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.