输出数组的最后一个数字 - C 中的动态内存分配

output the last number of the array - Dynamic Memory allocation in C

下面是作业:

编写一个程序来打印双精度数组中的最后一个元素。该数组应具有动态长度。长度应取自命令行参数。如果您的程序没有提供命令行参数,则数组长度应为 5。该数组应动态创建并填充以 0.0 -> 0.1 -> 0.2 开头的值......

示例:

调用你的程序:mycalc.exe 42

你的程序的输出将在这个例子中:我的最后一个数组元素是:4.1


但是,当我 运行 这段代码时,无论我如何更改我的命令行参数,甚至我没有命令行参数,它总是显示 0.0。有什么问题,有人可以更正我的代码吗? 我很着急,非常感谢。

下面是我写的代码:

#include <stdio.h>  // standard input/output functions
#include <string.h>
#include <stdlib.h>

#define last_digit_of_Matrikelnummer 5

int main(int argc, char* argv[])
{
    int i;
    int DynArraylen;
    double* DynArray;

    

    if (argc == 1)
    {
        DynArraylen = last_digit_of_Matrikelnummer;
        DynArray = (double*)malloc(DynArraylen * sizeof(double));
        DynArray[0] = 0.0;

        for (i = 1; i < DynArraylen; i++)
        {
            DynArray[i] = DynArray[i - 1] + 0.1;
        }
        printf("My last array element is: %.1f\n", DynArray[i]);

        //Free memory
        free(DynArray);
    }
    else if (argc == 2)
    {
        //Dynamic memory allocation
        DynArraylen = (int)argv[1];
        DynArray = (double*)malloc(DynArraylen * sizeof(double));
        DynArray[0] = 0.0;

        //check 
        if (DynArray == NULL)
        {
            printf("out of memory\n");
        }
        else
        {
            DynArray[0] = 0.0;
            for (i = 1; i < DynArraylen; i++)
            {
                DynArray[i] = DynArray[i - 1] + 0.1;
            }
            printf("My last array element is: %.1f\n", DynArray[i]);
        }

        //Free memory
        free(DynArray);
    }


    return 0;
}

循环后

for (i = 1; i < DynArraylen; i++)

i 的值将等于 DynArraylen。哪一个出界了。

您需要在循环后使用i - 1(或DynArraylen - 1)来打印最后一个元素。


并且如前所述,(int)argv[1] 不是将字符串转换为数字的正确方法。为此,您需要使用 strtol 函数:

DynArraylen = strtol(argv[1], NULL, 10);

strtol 函数包括字符串验证,您确实需要检查以确保 DynArraylen 在调用后有效。