Printf导致崩溃

printf causes crash

本文关键字:崩溃 Printf      更新时间:2023-10-16
#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 ("%sn", 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 ("%sn", argv[0]);
  }
  return 0;
}

或者使用stream:

#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("%sn", argv[i]);
    }
}