簡體   English   中英

轉換命令行參數數組並將其存儲在int數組中

[英]Convert an array of command line arguments and store them in an int array

我正在編寫一個程序,該程序從命令行(例如10 20 30 40)獲取參數數組,將其轉換為整數,然后將其保存在int數組中,以備后用。 我已經聲明了堆的指針。 我想將CL中的數字計數存儲在length變量中。 然后為該長度分配空間,並將其復制到堆中。 接下來,使用一個將命令行參數轉換為整數並將其復制到int數組中的函數,我對如何傳遞命令行值感到困惑。 有人可以指出我正確的方向嗎? 謝謝。

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

void convert(char** source, int length);

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

  int length = 0;
  char *p_heap;

  if( argc > 11 || argc < 2 ) {
    printf("arguments 1-10 are accepted %d provided\n", argc-1);
    printf("Program Name Is: %s",argv[0]); 
    exit(EXIT_FAILURE);
  }

  length = argc-1;
  p_heap = malloc(sizeof(length));
  strcpy(p_heap, length);
  convert(p_heap, length);

  //printf("Average %f\n", avg());

  puts(p_heap);
  free(p_heap);

  return 0;
}

void convert(char** source, int length){

  int *dst;
  int i;

  for(i=0;i<length;i++) {
    dst = atoi([i]); 
  } 


}

注意:我假設來自CL的正確輸入。

我想將CL中的數字計數存儲在length變量中。

如果您假設來自CL的輸入正確,那么您在argc-1擁有此數字。

然后為該長度分配空間,並將其復制到堆中。

dst = malloc((argc-1)*sizeof *dst);

接下來,使用將命令行參數轉換為整數並將其復制到int數組中的函數。

for(int i=0; i<argc-1; i++) 
    sscanf(source[i], "%d", &dst[i]);

您還應該convert的返回類型更改為int * ,然后返回dst

#include <stdlib.h>
#include <stdio.h>
#include <errno.h>

int main(int argc, char **argv)
{
    if (argc == 1)
        return EXIT_SUCCESS;

    long *data = malloc((argc - 1) * sizeof *data);

    for (int i = 1; i < argc; ++i) {
        char *endptr;

        errno = 0;
        data[i-1] = strtol(argv[i], &endptr, 10);

        if (*endptr != '\0') {
            fputs("Input error :(", stderr);
            return EXIT_FAILURE;
        }

        if (errno == ERANGE) {
            fputs("Parameter out of range :(\n\n", stderr);
            return EXIT_FAILURE;
        }
    }

    for (int i = 0; i < argc - 1; ++i)
        printf("%ld\n", data[i]);

    free(data);
}

為什么在if( argc > 11 || argc < 2 ) {與11進行比較?

 length = argc-1; p_heap = malloc(sizeof(length)); 

sizeof(length)sizeof(int) ,如果您希望的話,它不取決於length的值

strcpy(p_heap,長度);

strcpy獲得兩個char*長度值是args的數目,而不是char數組的地址,因此結果是不確定的,並且可能很戲劇性

 convert(p_heap, length); 

convert的第一個參數必須為char**p_heapchar*

 void convert(char** source, int length){ int *dst; int i; for(i=0;i<length;i++) { dst = atoi([i]); } 

}

你不使用

dstint*atoi返回int

[i] ???

在提供SO代碼之前,我建議您先使用高警告級別(例如gcc -pedantic -Wextra for gcc )檢查它的編譯是否沒有警告/錯誤。

暫無
暫無

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

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