gpt4 book ai didi

c - 为什么我的访问权限不好

转载 作者:行者123 更新时间:2023-11-30 15:33:48 24 4
gpt4 key购买 nike

我有一个结构如下

struct cmd{

char **tokenized_cmd;
int num_params;
}

在带有签名的某些函数中我有以下内容

void parse_cmd(cmd, char *line){

char *token;
char *saveptr;
char *delim_space;
char *delim_comma;
char *delim_new_line;
char **result;
int i;
int j=0;
command.num_params = 0;
delim_space = " ";
delim_comma = ",";
delim_new_line = "\n";
if(line!=NULL){
line = strtok(line,delim_new_line);
token = strtok_r(line,delim_space,&saveptr);
}
result[j]=token;
j++;
for (i=0;i<3;i++){
token = strtok_r(NULL, delim_comma, &saveptr);
if(token!=NULL){
result[j] = token;
j++;
}else{
result[j]='\0';
break;
}
}
command.tokenized_cmd = result;
command.num_params = j;

if(command.tokenized_cmd[0] == '\0'){
printf("empty");
}

}

为什么这段代码:

if(command.tokenized_cmd[0] == '\0'){
printf("empty");
}

导致访问错误?

这似乎并不能解决问题:

 command.tokenized_cmd = malloc(sizeof(result));
for(i=0;i<j;i++){
command.tokenized_cmd[i]= malloc(sizeof(result[i]));
command.tokenized_cmd[i] = result[i];
}
command.num_params = j;

最佳答案

您似乎没有为结果分配空间,因此此步骤应该无法提供任何可访问的内容:

command.tokenized_cmd = result;

如果result存储多个字符串,那么您需要使用malloc()分配空间来存储任意多个char *(字符串) .

此外,对于每个单独的字符串或 char *,您需要使用 malloc() 为其分配空间。

当您使用完 resulttokenized_cmd 并且不再需要它时,您可能需要使用 free() 来恢复您分配的内存,以防止内存泄漏。对于已使用完的双指针 (char **),您必须释放字符串和指向这些字符串的指针。

关于c - 为什么我的访问权限不好,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23579035/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com