我对语言C相当陌生,而且我的指针和指针混乱不堪。动态内存分配。我要做的是读入命令行参数并将它们存储在动态内存分配中;然后将它们打印出来。例如,如果我输入./rpd 4 3 2 3 8,那么argv [1](4)应该递减,其他3个值(3,2,3,8)应该跟随。输出应如下所示:
人1有3辆车。 人2有2辆车。 人3有3辆车。 人4有8辆车。
我的代码是:
#include <stdio.h>
int main(int argc, char *argv[]) {
/** argc is number of arguments at command line*/
/** argv[] is an array of pointers to character strings
i.e. argv 1 points to argc 1 */
int numberOfCars;
char *person;
int i;
int j;
// Allocate the size of the array for each element of char
person = malloc(sizeof(numberOfCars) *argc);
for(i = 2; i < argc; i++) {
/** Convert char to int */
numberOfCars = atoi(argv[i]);
person = atoi(argv[1]);
if(person > 0){
for(j = 2; j < person; j--) {
printf("Person %d has %d cars \n", person--, numberOfCars);
}
} else {
/** DO NOTHING */
}
}
return person;
}
如果这对我来说有点混乱(或天真),我很抱歉;但是我对这种语言非常陌生,所以我仍然试图了解一切。
非常感谢您的帮助:)
答案 0 :(得分:1)
尝试这样的事情:
#include <stdio.h>
int main(int argc, char *argv[]) {
/** argc is number of arguments at command line*/
/** argv[] is an array of pointers to character strings
i.e. argv 1 points to argc 1 */
int numberOfCars;
int i;
for(i = 1; i < argc; i++) {
/** Convert char to int */
numberOfCars = atoi(argv[i]);
printf("Person %d has %d cars \n", i, numberOfCars);
}
return 0;
}
然后根据您的需要调整它。您不需要为第一个输入参数指定人数,因为它是您为每个人指定的汽车数量所暗示的。
答案 1 :(得分:0)
atoi
返回一个int,但person
是一个char指针。
#include <stdio.h>
int main(int argc, char *argv[]) {
/** argc is number of arguments at command line*/
/** argv[] is an array of pointers to character strings
i.e. argv 1 points to argc 1 */
int numberOfCars;
int i;
int p = 0;
for(i = 2; i < argc; i++) {
/** Convert char to int */
numberOfCars = atoi(argv[i]);
printf("Person %d has %d cars \n", ++p, numberOfCars);
}
return 0;
}
输出:
$ ./a.out 4 3 2 3 8 10
Person 1 has 3 cars
Person 2 has 2 cars
Person 3 has 3 cars
Person 4 has 8 cars
Person 5 has 10 cars
答案 2 :(得分:0)
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
int numberOfCars;
int *person;
int i;
person = malloc(sizeof(int) * argc);
for(i = 1; i < argc; i++)
{
numberOfCars = atoi(argv[i]);
if (i == 1)
numberOfCars--;
person[i] = numberOfCars;
printf("Person %d has %d cars\n", i, numberOfCars);
}
free(person);
return 0;
}
$ ./rpd 4 3 2 3 8
Person 1 has 3 cars
Person 2 has 3 cars
Person 3 has 2 cars
Person 4 has 3 cars
Person 5 has 8 cars
$
#include <stdio.h>
#include <stdlib.h>
您需要<stdlib.h>
来声明malloc()
和free()
。使用malloc()
时,您还应使用free()
。
int main(int argc, char *argv[])
{
int numberOfCars;
int *person;
int i;
变量j
在修订版中未使用,因此已删除。变量person
更改为int *
,因为person[i]
将存储i
人的汽车数量。
person = malloc(sizeof(int) * argc);
我将sizeof()
更改为int
;也可以使用sizeof(*person)
,并且有充分的理由选择它。
for (i = 1; i < argc; i++)
{
numberOfCars = atoi(argv[i]);
作业person = atoi(argv[1]);
在多个级别上都是错误的。它泄露了malloc()
分配的内存;它为指针(最初为int
)指定了char *
。
if (i == 1)
numberOfCars--;
这涉及'从第一个参数中减去一个'的要求。
person[i] = numberOfCars;
记录人i
拥有的汽车数量。没用过;可以在numberOfCars
语句中使用它来代替printf()
。
printf("Person %d has %d cars\n", i, numberOfCars);
一条线末端的空间是我的bêtenoire。不要把空格放在换行符之前。
}
free(person);
释放已分配的内存。在这个玩具程序中,它并不重要(o / s即将释放程序使用的所有资源),但如果它是一个大程序中的一个函数并且它省略了free()
,它会每次调用时都会泄漏内存。养成在编写free()
后立即为每个malloc()
撰写malloc()
的习惯。 (或者,至少,确保您知道在哪里编写free()
,并且执行在编译之前编写free()
,更不用说测试程序了。)
return 0;
}
答案 3 :(得分:0)
您想要动态存储什么? 如果只想按照您提到的那样打印值。你根本不需要动态分配。
如果你想存储它们,请使用 char **人; //而不是* person,并使用
保持每个人的分配内存person [i] = malloc(sizeof(argv [i])+ sizeof(“person have cars”)); //不确定您需要的格式存储,您可以相应地更改