Cor*_*lis 7 c++ arrays syntax pointers
这里是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;
}
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)
1)它应该是char **argv
或2 )char *argv[]
CString是操作 C 字符串(字符数组)的 std 库。您无法在不重新分配的情况下调整数组的大小,但可以通过索引引用它来更改元素的内容:a pointer to an array of characters
an 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)