【发布时间】:2012-12-21 23:44:48
【问题描述】:
#include <stdio.h>
int main(char sendbuf[100])
{
printf (sendbuf);
return 0;
}
当我尝试使用这个非常基本的程序时不知何故崩溃了,它的目的是打印出作为参数输入的任何内容。如果我删除“printf (sendbuf);”行崩溃消失了。
【问题讨论】:
#include <stdio.h>
int main(char sendbuf[100])
{
printf (sendbuf);
return 0;
}
当我尝试使用这个非常基本的程序时不知何故崩溃了,它的目的是打印出作为参数输入的任何内容。如果我删除“printf (sendbuf);”行崩溃消失了。
【问题讨论】:
main 的第一个参数是参数的数量。第二个参数是一个字符串数组。第二个参数的第一个元素(索引 0)是程序的名称:
#include <stdio.h>
int main(int c, char **argv)
{
printf ("%s\n", c > 1 ? argv[1] : "No Argument");
return 0;
}
【讨论】:
您的第一个参数必须是整数,而不是字符数组。这是正确的程序:
#include <stdio.h>
int main(int argc, char* argv[])
{
if (argc > 1) {
printf( argv[1] );
}
else {
printf( "No arguments provided" );
}
return 0;
}
argv[0] 是你的程序名,所以 argv[1] 是命令行提供的第一个参数。
【讨论】:
C 支持两种形式的 main 函数:
int main() { /* ... */ }
and
int main(int argc, char* argv[]) { /* ... */ }
要从 main 中获取参数,您需要将代码更改为:
#include <stdio.h>
int main(int argc, char* argv[])
{
if (argc > 1){
printf ("%s\n", argv[0]);
}
return 0;
}
或者使用流:
#include <iostream>
int main(int argc, char* argv[])
{
if (argc > 1){
std::cout << argv[0]) << std::endl;
}
return 0;
}
argv[0]为应用名称,输入参数从argv[1]开始。
【讨论】:
一个实现必须支持main的以下两个定义:
int main() { }
int main(int argc, char* argv[]) { }
它们是否支持任何其他定义是实现定义的。我不知道任何允许int main(char*) 的实现(这是你的等价物)。
【讨论】:
这将在程序名称之后打印您在命令行中键入的所有内容,甚至包含空格。程序名后不输入任何内容也不会崩溃。
#include <stdio.h>
int main(int argc, char **argv)
{
for(int i=1; i<=argc; ++i) {
printf("%s\n", argv[i]);
}
}
【讨论】: