将argv存储到int数组中

时间:2015-04-22 18:31:33

标签: c arrays argv calloc argc

我有这样的代码将argv存储到动态分配的int数组中:

int *data;    // pointer to array of integer numbers
int size;     // size of data array

int main(int argc, char* argv[]) {
  // initialize array data
  size=argc;
  printf("%dSize=\n",size);
  printf("%d\n",argc);
  data=(int*)calloc(size,sizeof(int));
  int i=0;
  for (i=1;i<size;i++)
  {
   data[i]=argv[i];
   printf("%d\n",data[i]);
  }
  for (i=1;i<argc;i++)
  {
   printf("%d\n",argv[i]);
  }
  return 0;
}

当我在命令行中运行时: ./sumprime 5 1 2 3 4 它打印:

6Size=
6
15311660
15311662
15311664
15311666
15311668
15311660
15311662
15311664
15311666
15311668

不是我预期的5 1 2 3 4数组。如何从int存储argv数组,然后将其打印出来?

2 个答案:

答案 0 :(得分:2)

应该是:

   data[i]=atoi(argv[i]);

记住命令行参数是字符串。因此,即使您在命令行中传递一个整数,也需要将其转换为整数。

答案 1 :(得分:1)

public partial class Form1 : Form { int r = 0; public Form1() { InitializeComponent(); } private void btn_Number_Click(object sender, EventArgs e) { Random random = new Random(); List<int> BingoNumbers = new List<int>(); for(int i = 0; i < 91; i++) { BingoNumbers.Add(i); } r = random.Next(BingoNumbers.Count); BingoNumbers.RemoveAt(r); RichTextBox1.Text = BingoNumbers[r].ToString(); RichTextBox2.Text = BingoNumbers[r].ToString(); } } 是一个指向字符串的指针数组;参数不是整数,它们是包含ASCII字符的空终止字符串;如果您想将它们解释为整数值,则需要执行转换:

考虑:

argv

您的输入,输出:

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

int main(int argc, char** argv ) 
{
    int size = argc - 1 ;
    int* data  = (int*)calloc( size, sizeof(int) ) ;

    printf( "Size = %d\n", size ) ;

    // For each argument...
    for( int i = 0; i < size; i++)
    {
        // convert string to an integer
        sscanf( argv[i + 1], "%d", &data[i] ) ;

       // Output the argument string and its converted value
        printf( "\"%s\" -> %d\n", argv[i + 1], data[i] ) ; 
    }

    return 0;
}

看到调用时会发生什么可能是有益的:

Size = 5
"5" -> 5
"1" -> 1
"2" -> 2
"3" -> 3
"4" -> 4

其中给出了以下输出:

./sumprime 5 1 hello 3 4