-3
#include <stdio.h>
int main(char sendbuf[100]) 
{
  printf (sendbuf);
  return 0;
}

当我尝试使用它时,这个非常基本的程序会以某种方式崩溃,它意味着打印出作为参数输入的任何内容。如果我删除“printf (sendbuf);”行 崩溃消失了。

4

5 回答 5

1

第一个参数main是参数的数量。第二个参数是一个字符串数组。第二个参数的第一个元素(索引 0)是程序的名称:

#include <stdio.h>
int main(int c, char **argv) 
{
  printf ("%s\n", c > 1 ? argv[1] : "No Argument");
  return 0;
}
于 2012-12-21T23:47:47.230 回答
1

您的第一个参数必须是整数,而不是 char 数组。这是正确的程序:

#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] 是命令行中提供的第一个参数。

于 2012-12-21T23:46:29.613 回答
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] 开始(如果有)。

于 2012-12-21T23:46:42.500 回答
0

实现必须支持以下两个定义main

int main() { }
int main(int argc, char* argv[]) { }

它们是否支持任何其他定义是实现定义的。我不知道任何允许的实现int main(char*)(这就是你的等价物)。

于 2012-12-21T23:48:24.177 回答
0

这将在程序名称之后打印您在命令行上键入的所有内容,即使带有空格。如果您在程序名称后不输入任何内容,它不会崩溃。

#include <stdio.h>
int main(int argc, char **argv) 
{
    for(int i=1; i<=argc; ++i) { 
        printf("%s\n", argv[i]);
    }
}
于 2012-12-21T23:54:49.363 回答