输出数组的最后一个数字 - 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
在调用后有效。
下面是作业:
编写一个程序来打印双精度数组中的最后一个元素。该数组应具有动态长度。长度应取自命令行参数。如果您的程序没有提供命令行参数,则数组长度应为 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
在调用后有效。