簡體   English   中英

c命令行參數

[英]c command line arguments

#include <stdio.h>
#include <string.h>

int convert(char *str)
{
  int i, number = 0;
  for (i = 0; str[i] != '\0'; ++i) {
    number = number * 10 + str[i] - '0';

  }
  return number;
}

int main(int argc, char *argv[])
{
  int j;
  int c = convert(argv[2]);
  if (argc == 3) {
    for (j = 0; j < c; j++) {
      printf("Hello, %s!\n", argv[1]);
    }
  } else if (argc < 3) {
    printf("Not Enough Arguments\n");
  } else if (argc > 3) {
    printf("Too Many Arguments\n");
  }
  return 0;
}

給出少於3個參數時出現分段錯誤。 如果給出少於3個參數,則應打印“參數不足”,但會出現錯誤分段錯誤。

輸入: ./a raju預期輸出: not enough arguments

int c = convert(argv[2]);

argc為2時, argv[2]將為NULL 您希望這行代碼能做什么,因為程序運行時首先要執行它?

進行重構,以使其下方的條件構成針對該條件的保護,這與您可能想要的目的更接近:

#include <stddef.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int convert(char *str)
{
  int i, number = 0;
  for (i = 0; str[i] != '\0'; ++i) {
    number = number * 10 + str[i] - '0';
  }
  return number;
}

int main(int argc, char *argv[])
{
  if (argc != 3) {
    printf(  argc < 3   ? "Not Enough Arguments\n"
           /*argc > 3*/ : "Too Many Arguments\n"  );
    exit(EXIT_FAILURE);
  }

  int c = convert(argv[2]);
  for (int j = 0; j < c; j++) {
    printf("Hello, %s!\n", argv[1]);
  }
  return 0;
}

PS由於argv[0]通常是程序名稱而不是參數,因此argv[1]argv[2]將作為您的參數, argv[3]將為NULL ,如果您對它們進行計數,則將計算兩個參數,而不是三; 當給出三個參數時,期望argc == 4

您可能對getopt.h庫感興趣。 它處理命令行參數的所有標准功能。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM