C++新手来了。我有一些基本问题。在int main( int argc, char *argv[] )中
char *argv[]应该如何被读(或者对人类说出来)?argv[]的全部内容复制到单个std::string变量中?argv[]中,是否有其他方法来确定argv[]中的/参数的个数?如果是,怎么做?(*)我希望你能解释一下数字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 );发布于 2011-05-10 14:01:31
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 504) --这是一种方法:
string *myString;
if(argc > 0)
{
myString = new string(argv[0]);
for(int i = 1; i < argc; ++i)
myString->append(argv[i]);
}5)是的,据库比说:
POSIX为argv指定了最终的空指针,例如,请参见“应用程序应确保此数组的最后一个成员为空指针。”在pubs.opengroup.org/onlinepubs/9699919799/functions/exec.html
这意味着你可以:
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发布于 2011-05-10 14:00:13
发布于 2011-05-10 14:03:53
char **argv[]是错的。它应该是char **argv或char *argv[],而不是两者兼而有之。然后它变成指向字符的指针,或者更确切地说是指向c-字符串的指针,即c-字符串数组。) cdecl.org在这种事情上也很有帮助。
然后,为了进入,当然。只是,好吧,进入它。) argv[0]将是第一个字符串,argv[3]将是第4个字符串。但我绝对不建议在数组中替换不是你的或者你知道的内部的东西。
在调整数组大小时,由于您正在编写C++,请使用std::vector,它为您完成所有复杂的分配工作,并且非常安全。通常,它取决于数组类型。动态分配数组(int* int_arr = new int[20])可以,静态数组(int int_arr[20])不能。
若要将argv中的所有内容复制到单个std::string中,请遍历数组并将每个c-字符串附加到std::string中。不过,我不建议使用std::vector<std::string>,即一个std::strings数组,每个数组都包含一个参数。
std::vector<std::string> args;
for(int i=0; i < argc; ++i){
args.push_back(argv[i]);
}在最后一点上,由于标准要求argv以NULL指针结束,所以非常容易。
int myargc = 0;
char** argv_copy = argv;
while(++argv_copy)
++myargc;while(++argv_copy)将首先增加数组的指针,让它指向下一个元素(例如,在第一次迭代之后,它将指向c-string #2 (argv[1]))。在此之后,如果指针计算为false (如果是NULL),则环路刹车,您就有了myargc。:)
https://stackoverflow.com/questions/5951133
复制相似问题