(C++)关于语法的非常基本的问题

Cor*_*lis 7 c++ arrays syntax pointers

这里是C++新手.我有一些基本问题.在int main( int argc, char *argv[] )

  1. 如何char *argv[]阅读(或向人类说出)?
  2. 是否可以清除/擦除此类阵列中的特定内容(字符),字符?如果有,怎么样?
  3. 数组可以调整大小吗?如果有,怎么样?
  4. 如何将整个内容复制argv[]到单个std::string变量?
  5. 是否有确定的数量的其他方式的话/参数argv[]argc?如果有,怎么样?(*)

我很感激2-5号的解释(不是代码).我会自己弄清楚代码(我用这种方式学得更快).

提前致谢.

(*)我知道这main(char *argv[])是非法的.我的意思是,是否至少有一种根本不涉及的方式argc,如下面的表达式:

for( int i = 0; i < argc; ++i ) {
    std::cout << argv[i] << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

int i = 0;    
while( i < argc ) {
    std::cout << argv[i] << std::endl;
    ++i;
}
Run Code Online (Sandbox Code Playgroud)

要么

int i = 0;
do { 
     std::cout << argv[i] << std::endl;
     ++i; } while( i < argc );
Run Code Online (Sandbox Code Playgroud)

Cha*_*had 0

1)它应该是char **argv或2 )char *argv[] CString是操作 C 字符串(字符数组)的 std 库您无法在不重新分配的情况下调整数组的大小,但可以通过索引引用它来更改元素的内容:a pointer to an array of charactersan array of strings

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;
}
Run Code Online (Sandbox Code Playgroud)


3)从技术上讲不可以,但是可以将它们删除然后重新分配:

int *array = new int[15]; //array of size 15
delete[] array;
array = new int[50]; //array of size 50
Run Code Online (Sandbox Code Playgroud)

4)这是一种方法:

string *myString;
if(argc > 0)
{
   myString = new string(argv[0]);
   for(int i = 1; i < argc; ++i)
      myString->append(argv[i]);
}
Run Code Online (Sandbox Code Playgroud)

5)是的,根据 Cubbi 的说法:

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
Run Code Online (Sandbox Code Playgroud)