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个数据集,则会导致堆损坏。