如何使用 strdup 分配具有给定 char 数组的结构?
How do I allocate a struct with a given char array using strdup?
所以我有一个名为 cmd_t 的 typedef 结构和一个名为 argv 的字符数组成员。
我有一个函数,它接受一个字符数组参数,我希望它用一个与输入数组具有相同值的数组来初始化结构,但是我需要这个赋值来使用 strdup 来复制元素。到目前为止,我有这样的事情:
typedef struct {
char *argv[ARG_MAX+1]; //ARG_MAX being a defined constant
...
} cmd_t;
cmd_t *cmd_new(char *argv[]){
cmd_t *cmd;
for (int i = 0; i < ARG_MAX; i++){ //Last element must be NULL
cmd->argv[i] = strdup(argv[i]);
}
...
}
虽然我收到了一个令我担心的警告。
warning: ‘cmd’ may be used uninitialized in this function [-Wmaybe-uninitialized]
cmd->argv[i] = strdup(argv[i]);
我认为我的方法相当幼稚,如果我能得到一些正确方向的指示,那就太好了。
/* declared here as a pointer, but is not yet pointing to a valid object */
cmd_t *cmd;
for (int i = 0; i < ARGMAX; i++){
/* cmd has not yet been initialised. It's pointing at garbage! */
cmd->argv[i] = strdup(argv[i]);
}
您可能希望先将 cmd 指针初始化为某个有效内存...
cmd_t *cmd = malloc(sizeof(cmd_t));
所以我有一个名为 cmd_t 的 typedef 结构和一个名为 argv 的字符数组成员。 我有一个函数,它接受一个字符数组参数,我希望它用一个与输入数组具有相同值的数组来初始化结构,但是我需要这个赋值来使用 strdup 来复制元素。到目前为止,我有这样的事情:
typedef struct {
char *argv[ARG_MAX+1]; //ARG_MAX being a defined constant
...
} cmd_t;
cmd_t *cmd_new(char *argv[]){
cmd_t *cmd;
for (int i = 0; i < ARG_MAX; i++){ //Last element must be NULL
cmd->argv[i] = strdup(argv[i]);
}
...
}
虽然我收到了一个令我担心的警告。
warning: ‘cmd’ may be used uninitialized in this function [-Wmaybe-uninitialized]
cmd->argv[i] = strdup(argv[i]);
我认为我的方法相当幼稚,如果我能得到一些正确方向的指示,那就太好了。
/* declared here as a pointer, but is not yet pointing to a valid object */
cmd_t *cmd;
for (int i = 0; i < ARGMAX; i++){
/* cmd has not yet been initialised. It's pointing at garbage! */
cmd->argv[i] = strdup(argv[i]);
}
您可能希望先将 cmd 指针初始化为某个有效内存...
cmd_t *cmd = malloc(sizeof(cmd_t));