int NJOBS=0;

struct Jobs{
    char *jname;
    int btime;
    int priority;
    int order;
}Job[10];

int cmd_run(int nargs, char **args) {
    NJOBS++;

    Job[NJOBS].order=NJOBS;

    int bt = atoi(args[2]);
    int pri = atoi(args[3]);

    Job[NJOBS].btime=bt;
    Job[NJOBS].priority=pri;
    Job[NJOBS].jname=args[1];
}

我有一个携带工作细节的结构。调度程序函数正在将参数(args)从命令行传递给cmd_run函数。
cmd_run中的args将具有类似于“Jobname 101”的内容。
我需要将Jobname复制到Job[NJOBS].jname,同时我可以复制整数变量,但字符串变量没有被复制。我还尝试使用一个本地cont char数组,并尝试从参数复制到本地变量,但仍然无法工作。
请提供建议。
非常感谢你的帮助。
非常感谢!

最佳答案

首先,如果知道JNEX的最大长度,则使用char数组而不是char指针,并使用strcpy或有界的strncpy将输入复制到结构中。如果不是,则对指针使用动态内存分配,并对其使用strcpy。您应该记住在完成分配的内存的用途之后再处理它。

Job[NJOBS].jname = (char*)malloc(strlen(args[1])+1);
strcpy(Job[NJOBS].jname,args[1]);

//...
//...
//...

free(Job[NJOBS].jname);

正如Pablo所指出的,只有当您填写了第零个索引时,才能增加NJOBS。否则,如果使用Job[NJOBS]填充10个数据集,则会导致堆损坏。

09-04 16:36