【问题标题】:printf causes crashprintf 导致崩溃
【发布时间】:2012-12-21 23:44:48
【问题描述】:
#include <stdio.h>
int main(char sendbuf[100]) 
{
  printf (sendbuf);
  return 0;
}

当我尝试使用这个非常基本的程序时不知何故崩溃了,它的目的是打印出作为参数输入的任何内容。如果我删除“printf (sendbuf);”行崩溃消失了。

【问题讨论】:

    标签: c++ c printf


    【解决方案1】:

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

    #include <stdio.h>
    int main(int c, char **argv) 
    {
      printf ("%s\n", c > 1 ? argv[1] : "No Argument");
      return 0;
    }
    

    【讨论】:

    • 我的测试用例是“program.exe 'No Argument'”。
    【解决方案2】:

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

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

    【讨论】:

    • program.exe '未提供参数'
    • @JiveDadson:是的。我最初跳过了参数检查以使示例尽可能简单。反正别人修改了答案,我稍微调整了一下,就解决了。
    【解决方案3】:

    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]开始。

    【讨论】:

    • 为什么选择 C++?问题标记为 C。
    【解决方案4】:

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

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

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

    【讨论】:

      【解决方案5】:

      这将在程序名称之后打印您在命令行中键入的所有内容,甚至包含空格。程序名后不输入任何内容也不会崩溃。

      #include <stdio.h>
      int main(int argc, char **argv) 
      {
          for(int i=1; i<=argc; ++i) { 
              printf("%s\n", argv[i]);
          }
      }
      

      【讨论】:

        猜你喜欢
        • 2018-01-23
        • 2020-12-02
        • 2013-11-11
        • 2011-01-24
        • 2015-02-23
        • 2011-04-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多