C++新手在这里。我有一些基本问题。用int main( int argc, char *argv[] )
char *argv[]
(或对人类说出来)? argv[]
的全部内容复制到单个std::string
变量中? argv[]
中没有argc
的单词的数目/参数?如果是,怎么办? (*)我希望对数字2-5进行解释(而不是代码)。我自己弄清楚代码(这样我学得更快)。
提前致谢。
(*)我知道
main(char *argv[])
是非法的。我的意思是,是否至少有一种根本不涉及argc
的方式,如以下表达式所示:for( int i = 0; i < argc; ++i ) {
std::cout << argv[i] << std::endl;
}
和
int i = 0;
while( i < argc ) {
std::cout << argv[i] << std::endl;
++i;
}
或者
int i = 0;
do {
std::cout << argv[i] << std::endl;
++i; } while( i < argc );
最佳答案
1)应该是char **argv
或char *argv[]
,后者是a pointer to an array of characters
,通常称为an array of strings
2) CString是用于处理C字符串(字符数组)的std库。您不能在不重新分配的情况下调整数组的大小,但是可以通过按索引引用元素来更改元素的内容:
for(int i = 0; i < argc; ++i)
{
//set all the strings to have a null character in the
//first slot so all Cstring operations on this array,
//will consider it a null (empty) string
argv[i] = 0;
}
3)从技术上讲不行,但是可以将其删除然后重新分配:
int *array = new int[15]; //array of size 15
delete[] array;
array = new int[50]; //array of size 50
4)这是一种方法:
string *myString;
if(argc > 0)
{
myString = new string(argv[0]);
for(int i = 1; i < argc; ++i)
myString->append(argv[i]);
}
5)是的,根据Cubbi的说法:
这意味着您可以执行以下操作:
char *val = NULL;
int i = 0;
do
{
val = argv[i++]; //access argv[i], store it in val, then increment i
//do something with val
} while(val != NULL); //loop until end of argv array
关于c++ - (C++)关于语法的非常基本的问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5951133/