str*_*nok 1 c++ arrays string char
我已经更改了我的代码,现在编译时出现这些错误:
`check.cpp: In function ‘int main()’:`
Run Code Online (Sandbox Code Playgroud)
check.cpp:14:55: error: invalid conversion from ‘const char**’ to ‘char* const*’ [-fpermissive]
/usr/include/getopt.h:152:12: error: initializing argument 2 of ‘int getopt(int, char* const*, const char*)’ [-fpermissive]
int main() {
string text="-f input.gmn -output.jpg";
int argc=text.length();
cout<<"argc: "<<argc<<endl;
char const * argv = text.c_str();
cout<<"argv: "<<argv<<endl;
int c = getopt (argc, &argv, "f:s:o:pw:h:z:t:d:a:b:?");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
您可以使用text.c_str()将a转换std::string为a const char*.看到这里.
要详细说明我的答案,有很多方法可以创建所需的数组,但这里已经在这里,这里,这里和这里进行了描述.一个简单的解决方案,你的问题不涉及new/ malloc或密集使用STL和istringstream/ back_inserter或copy什么不是和执行真的很快可能看起来像这样:
/* variables. */
std::vector< char* > argv;
int i, argc, state;
char c;
/* convert string to char string with automatic garbage collection. */
std::vector< char > tokens(text.begin(), text.end());
tokens.push_back(0);
/* tokenize string with space. */
for (state=0, argc=0, i=0; (c=tokens[i]); i++) {
if (state) {
if (c == ' ') {
tokens[i]=0;
state=0;
}
} else {
if (c != ' ') {
argv.push_back(&tokens[i]);
argc++;
state=1;
}
}
}
/* print argv. */
std::cout << "argc: " << argc << std::endl;
for (i=0; i < argc; i++) {
std::cout << "argv[" << i << "]: " << argv[i] << std::endl;
}
/* call getopt. */
c = getopt(argc, &argv[0], "f:s:o:pw:h:z:t:d:a:b:?");
Run Code Online (Sandbox Code Playgroud)
这只是一个例子,但是这种代码的一个优点是你可以使用其他字符作为分隔符,而不仅仅是空格,并且你不必关心释放已分配的内存,因为std::vector这会在函数退出时为你做这个.
| 归档时间: |
|
| 查看次数: |
8961 次 |
| 最近记录: |