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 **argvchar *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/

    10-15 04:31