【问题标题】:Read numeric input data from argv and store into an array of int in C从 argv 读取数字输入数据并存储到 C 中的 int 数组中
【发布时间】:2016-04-17 14:36:55
【问题描述】:

如何将程序参数中的三组数字读取到整数数组中,然后显示它们?那就是我输入./read 1,2,3 4,5,6 7,8,9,输出应该是

1 2 3

4 5 6

7 8 9

我的代码只适用于字符串,但不适用于整数

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

int main(int argc, char **argv)
{
  int i;
  int d[argc][3];
  int x[3];
  for(i = 1; i < argc; i ++){
      char *a[3];
      int j = 0;
      a[j] = strtok(argv[i], ",");
      while(a[j] != NULL){
        a[++j] = strtok(NULL, ",");
        x[j] = atoi(&(a[j]));
      }
      printf("%s %s %s \n", a[0], a[1], a[2]);
      printf("%d %d %d \n", x[0], x[1], x[2]);
    }
    return 0;
} 

每行显示1 0 0

【问题讨论】:

  • 注意:,3,4 之间,但不在6 7 之间。
  • int d[argc][3];的目的是什么?
  • x[j] = atoi(a[j]); 然后a[++j] = strtok(NULL, ",");
  • a[3] 也越界了。
  • strtok() 失败时,这行:x[j] = atoi(&amp;(a[j]));(写错了,应该是;x[j] = atoi(a[j]); 将访问地址 0 的内存。这几乎肯定会导致access violation 段错误事件。IE 在取消引用该值之前始终检查 (!=NULL) 从 strtok() 返回的值

标签: c arrays integer arguments argv


【解决方案1】:
  1. 这里有错误

    x[j] = atoi(&(a[j]));
    

    你不应该这样传递地址,只是

    x[j] = atoi(a[j]);
    

    应该可以。

  2. 您必须包含 stdlib.h

  3. 您必须在strtok() 之后检查NULL。或者正确地按照@this comment @BLUEPIXY 进行操作。

    x[j] = atoi(a[j]); 然后a[++j] = strtok(NULL, ",");

启用编译器警告应该让您自己找到它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-11-02
    • 2017-06-25
    • 2011-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-01
    相关资源
    最近更新 更多