传递给方法后,struct 中的字符串变成奇怪的符号
String inside struct become weird symbols after passing to a method
我有一个名为 task
的结构。它是一个包含结构计时和命令的链表。用来存放我在某个时间要执行的命令:
// and here is the struct command:
struct argument {
size_t length; // length of the data string
char *data;
};
typedef struct argument argument;
struct command {
int argc; // amount of arguments(words) in argv
argument *argv; // here I already tried put argument **argv
};
typedef struct command command;
我用 task *this_task = malloc(sizeof(task));
初始化任务
并使用 command *cmds = malloc(sizeof(command))
.
初始化命令
我用这个方法添加命令:
command *addToCommand(command *cmd, size_t argSize, char *arg) {
argument *currentArgument = malloc(sizeof(argument) + argSize * sizeof(char));
if (currentArgument == NULL) {
cmd = NULL;
return cmd;
}
currentArgument->length = argSize;
currentArgument->data = arg;
if (cmd == NULL) {
cmd = malloc(sizeof(command));
if (cmd == NULL) return cmd;
cmd->argv = malloc(sizeof(argument));
cmd->argv[0] = *currentArgument;
cmd->argc = 1;
} else {
cmd->argc++;
cmd->argv = realloc(cmd->argv, (cmd->argc) * sizeof(argument));
cmd->argv[cmd->argc-1] = *currentArgument;
}
return cmd;
}
然后设置为this_task->cmd = cmds;
现在的问题是:就在我完成所有这些之后,我用 printf( "%s\n", this_task->cmd->argv[0].data)
打印了我任务的第一个 argv
,它显示了 'test-0' 应该的样子。
你不复制字符串只分配指针给它。我会以不同的方式来做。
typedef struct argument {
size_t length; // length of the data string
char data[];
}argument;
typedef struct command {
int argc; // amount of arguments(words) in argv
argument *argv[];
}command;
command *addToCommand(command *cmd, const size_t argSize, const char *restrict arg)
{
int newargc = cmd ? cmd -> argc + 1 : 1;
argument *currentArgument = malloc(sizeof(*currentArgument) +
(argSize + 1) * sizeof(currentArgument -> data[0])); //if argsize includes null terminating character remove "+1"
if (currentArgument)
{
currentArgument->length = argSize;
strcpy(currentArgument->data, arg);
cmd = realloc(cmd, sizeof(*cmd) + newargc * sizeof(cmd -> argv[0]));
if(cmd)
{
cmd -> argc = newargc;
cmd -> argv[newargc -1] = currentArgument;
}
}
return cmd;
}
我有一个名为 task
的结构。它是一个包含结构计时和命令的链表。用来存放我在某个时间要执行的命令:
// and here is the struct command:
struct argument {
size_t length; // length of the data string
char *data;
};
typedef struct argument argument;
struct command {
int argc; // amount of arguments(words) in argv
argument *argv; // here I already tried put argument **argv
};
typedef struct command command;
我用 task *this_task = malloc(sizeof(task));
初始化任务
并使用 command *cmds = malloc(sizeof(command))
.
我用这个方法添加命令:
command *addToCommand(command *cmd, size_t argSize, char *arg) {
argument *currentArgument = malloc(sizeof(argument) + argSize * sizeof(char));
if (currentArgument == NULL) {
cmd = NULL;
return cmd;
}
currentArgument->length = argSize;
currentArgument->data = arg;
if (cmd == NULL) {
cmd = malloc(sizeof(command));
if (cmd == NULL) return cmd;
cmd->argv = malloc(sizeof(argument));
cmd->argv[0] = *currentArgument;
cmd->argc = 1;
} else {
cmd->argc++;
cmd->argv = realloc(cmd->argv, (cmd->argc) * sizeof(argument));
cmd->argv[cmd->argc-1] = *currentArgument;
}
return cmd;
}
然后设置为this_task->cmd = cmds;
现在的问题是:就在我完成所有这些之后,我用 printf( "%s\n", this_task->cmd->argv[0].data)
打印了我任务的第一个 argv
,它显示了 'test-0' 应该的样子。
你不复制字符串只分配指针给它。我会以不同的方式来做。
typedef struct argument {
size_t length; // length of the data string
char data[];
}argument;
typedef struct command {
int argc; // amount of arguments(words) in argv
argument *argv[];
}command;
command *addToCommand(command *cmd, const size_t argSize, const char *restrict arg)
{
int newargc = cmd ? cmd -> argc + 1 : 1;
argument *currentArgument = malloc(sizeof(*currentArgument) +
(argSize + 1) * sizeof(currentArgument -> data[0])); //if argsize includes null terminating character remove "+1"
if (currentArgument)
{
currentArgument->length = argSize;
strcpy(currentArgument->data, arg);
cmd = realloc(cmd, sizeof(*cmd) + newargc * sizeof(cmd -> argv[0]));
if(cmd)
{
cmd -> argc = newargc;
cmd -> argv[newargc -1] = currentArgument;
}
}
return cmd;
}