我试图使用main()
函数参数创建一个通过命令行获取参数的程序.作为一个(基本的)C++程序员(即使我非常熟悉C风格的指针和数组),我几乎没有使用过char*
字符串和C数组.我花了一些时间来接受main()
论证并将其转换为std::string
......所以问自己:为什么在C++中main()
函数不会超载std::vector<std::string> argv
而不是旧的char* argv[]
?
对于"重载",我的意思是main()
函数的共存,int main()
而int main(int argc, char *argv[])
不是程序员对正常函数的重载.
我知道我们使用这个论点,我甚至知道如何处理这个论点.
只有一件事我还是不明白.程序如何为来自输入的字符串分配内存.**argv在程序开始时没有分配内存,不是吗?我期待段错误,但它没有发生.
有人知道这个内存分配是如何工作的吗?
我在Linux上工作.存储器的哪一部分是存储的命令行参数(堆栈或堆)?
我试图执行free(argv)
,我遇到了分段错误.这是为什么?
命令行参数argc
,arv[]
与main
C中的函数一起使用,它们在哪里存储在内存中?
我正在寻找这个问题的存储区域应该是堆,数据段,堆栈或其他.
已知C语言中main函数的原型为int main(int argc, char **argv)
。argv 数组指向的那些字符串驻留在哪里?它们位于哪个内存段?数据、栈还是堆?
谢谢。
int main( int argc, char ** argv ){
//code here
return 0; }
Run Code Online (Sandbox Code Playgroud)
我知道:
argc
is表示包含文件名的命令行参数的数量char ** argv
应该是一个char*
最初表示为的数组char* argv[]
假设我是对的,与相对较新的符号char **argv
相比是char * argv[]
什么?它指向什么?
我看过这篇文章 C/C++主要功能的参数在哪里?但它似乎解释了争论的位置,而不是别的.
可能重复:
c - 警告:函数'printf'的隐式声明
刚刚学习C.我在hello world program中收到警告:
main()
{
printf("Hi\n");
}
Run Code Online (Sandbox Code Playgroud)
这是警告:
x.c: In function 'main':
x.c:2: warning: incompatible implicit declaration of built-in function 'printf'
Run Code Online (Sandbox Code Playgroud)
我怎样才能消除它?