【问题标题】:Filling an Array in C with 0 [closed]用0填充C中的数组[关闭]
【发布时间】:2017-03-16 22:20:08
【问题描述】:

这段代码有问题,我试图将array1 与array2 相加。

我通过命令行参数输入 array2 的数字。

当我输入 10 个数字时,它正在工作,但是当我添加少于 10 个时,我得到一个内存访问错误。

我现在的问题是:如何用数字 0 填充缺失的数组字段?例如:我输入9个数字,第10个字段应该是0。

【问题讨论】:

  • 在您的问题正文中添加您的代码。不要将我们链接到您的代码图片。
  • 欢迎来到 Stack Overflow,您应该发布代码而不是图片。
  • 您所描述的问题和您提出的问题似乎无关。崩溃并非来自未初始化为零。问题是您访问了不存在的 argv 值,因此访问了无效内存。修改您的代码以在使用任何 argv 值之前先检查 argc
  • 并且,请将您的代码作为文本而不是图像发布。
  • int array2[10] = {0}; for(i = 1; i < argc && i <= 10; ++i) array2[i-1] = atoi(argv[i]);

标签: c arrays addition


【解决方案1】:

你没有检查传递了多少命令行参数,当你索引到命令行参数数组时,你会得到一个越界错误。

在你的addiren 函数中,你应该利用argc 被传递并在你的for 循环限制中使用它。

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

int addiren(int argc, char**argv){
    int array_one[10] = {0,1,1,2,3,5,8,13,21,35};
    int array_two[10] = {0}; //Quick way to set the array to all zeros
    int array_three[10] = {0};

    //Set array_two with your cmd-line args, notice the use of argc
    for(int i = 1; i<argc && i<=10; i++){
        array_two[i-1] = atoi(argv[i]);
    }

    //Add array_one with array_two to array_three
    for(int i = 0; i<10; i++){
        array_three[i] = array_one[i]+array_two[i];
    }

    //Return an int since that's what the function return type requires
    return 0;
}

希望这会有所帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-24
    • 2016-03-11
    • 2016-11-19
    • 2014-03-28
    • 1970-01-01
    • 1970-01-01
    • 2020-07-16
    • 1970-01-01
    相关资源
    最近更新 更多