gpt4 book ai didi

c - 来自字符串的 vector 导致段错误

转载 作者:行者123 更新时间:2023-11-30 17:54:08 25 4
gpt4 key购买 nike

我正在尝试将字符串转换为 vector 。我的代码是:

char **my_str2vect(char *str)
{
char** vect;
char* temp;
int num_whitespaces = 0;

temp = str;

for(; *temp!= '\0'; temp++)
{
if(*temp == ' ')
{
num_whitespaces++;
}
}

vect = (char **)malloc((num_whitespaces+1)*sizeof(char *));

*vect = str;

for(; *str != '\0'; str++)
{
if(*str == ' ')
{
*str = '\0';
*vect = ++str;
vect++;
}
}

*vect = NULL;

return vect;
}

不幸的是,我遇到了段错误。我使用以下代码调用该函数:

n = read(0, buffer, MAX-1);
buffer[MAX] = '\0';

if(n >= 0)
{
vect = my_str2vect(buffer);
}

最佳答案

您的代码中有几个错误:1. 在您的 my_str2vect 函数中,指针 vect 被移动到分配内存的末尾,因此当您返回 vect 并想要使用某些内容时 vect[ 1]vect[2]在调用函数中,一定存在段错误。在开始对 vect 进行操作之前,您可以使用 vect_tmp 来存储原始位置。2. 开始转换字符串时出现一些逻辑错误。请引用下面我修改的代码。

char **my_str2vect(char *str)
{
char** vect;
char** vect_tmp;
char* temp;
int num_whitespaces = 0;

temp = str;

for(; *temp!= '\0'; temp++)
{
if(*temp == ' ')
{
num_whitespaces++;
}
}

vect_tmp = (char **)malloc((num_whitespaces+1)*sizeof(char *));
vect = vect_tmp;

*vect = str;

for(; *str != '\0'; str++)
{
if(*str == ' ')
{
*str = '\0';
*(++vect) = str + 1;
}
}

*(++vect) = NULL;

return vect_tmp;
}

请注意,即使修改后,该函数仍然无法处理一些连续空格的特殊情况。您可能会花更多的时间来提高兼容性。

关于c - 来自字符串的 vector 导致段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15149122/

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