我尝试将 char** 保存在结构中,我的代码是:
job * proceso = new_job(123,args[0],args,BACKGROUND);
printf("%s",(proceso->commando)[0]);
其中 args 是字符**;
并出现(空); 结构是:
job * new_job(pid_t pid, const char * command,char ** commando, enum job_state state){
job * aux;
aux=(job *) malloc(sizeof(job));
aux->pgid=pid;
aux->state=state;
aux->command=strdup(command);
aux->commando=malloc(1000);
aux->next=NULL;
return aux;}
typedef struct job_{
pid_t pgid; /* group id = process lider id */
char * command; /* program name */
char ** commando;
enum job_state state;
struct job_ *next; /* next job in the list */} job;
job * new_job(pid_t pid, const char * command,char ** commando, enum job_state state);
char** com;
#define new_list(name) new_job(0,name,com,FOREGROUND) // name must be const char *
我不知道错误;有人可以帮助我吗?
最佳答案
要复制char **
变量,您需要知道数组中有多少个指针。就像在 main
中一样,您会得到一个 argc
来告诉您 argv
中有多少个指针。添加该数据后,您可以:
// Added num_commando parameter
job * new_job(pid_t pid, const char * command, char ** commando, size_t num_commando, enum job_state state)
{
job * aux;
aux=(job *) malloc(sizeof(job));
aux->pgid=pid;
aux->state=state;
aux->command=strdup(command);
// Create array of pointers
aux->commando = malloc(sizeof(char *) * num_commando); // or sizeof(*aux->commando)
// Duplicate every string
for (size_t i = 0; i < num_commando; i++) {
aux->commando[i] = strdup(commando[i]);
}
aux->next=NULL;
return aux;
}
您还应该将 num_commando
参数添加到结构中,以便知道要 free()
有多少个字符串。
关于c - char** 和 struct 错误(空),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50720990/