c - char** 和 struct 错误(空)

标签 c

我尝试将 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/

相关文章:

c - 在 "C"的socket编程中,如何找出连接到Server的Client的IP地址?

c - 将txt文件中的字符存储在矩阵中

c - C 中的密码强度检测器不起作用

c - 带有结构体指针数组的 strcpy() 的段错误

c - 重命名和删除文件仅在第一次迭代中不起作用 (C)

c - 获取线程函数c的参数

c - 如何使用 dprintf()

C - 列出文件夹和所有子文件夹中包含的文件

c - C 中小写到大写和大写到小写

c - C语言中execl函数的用法