gpt4 book ai didi

C - strtok_s - 读取位置访问冲突

转载 作者:行者123 更新时间:2023-11-30 19:11:03 27 4
gpt4 key购买 nike

我不明白为什么我的函数会收到以下消息(在 Visual Studio 2015 中)。

0xC0000005: Access violation reading location 0x0000002C.

我已阅读this answer但这对我没有帮助。

这段代码是关于什么的。
有一个整数字符串分隔在“索引,值”对组中。索引是唯一的。每个组之间用分号分隔。示例:1,2;3,5;2,2;3,4
我正在尝试获取一个 int 数组,每个值都位于其索引处。

到目前为止,我的代码提取字符串并将其放入 char* 缓冲区
然后,我用分号分隔“index,value”组并将它们存储在 char** arrayKeyValue 中,它是 struct inputElement 的成员。另一个 struc 成员是一个 int,表示数组中“index,value”组的数量。我使用函数“separateStringBySemicolon”来完成此操作。

然后我尝试将每组“索引,值”分成一个新数组,其中每个“索引”将与其“值”匹配。我通过将结构传递给函数“separateKeyValue”来实现此目的。我使用 strtok_s 但出现错误。

第一次调用下面的函数 (token2 = strtok_s(arrayOfKeyValue[j], sepComma, &next_token2);) 会导致错误。我知道无法访问 token2next_token2 ,但我不确定。如果是这样,为什么?

double* separateKeyValue(struct inputElement* inputElement)
{
int count = inputElement->length;
char** arrayOfKeyValue = inputElement->data;

double* arrayDecimal = malloc(count * sizeof(double));
char sepComma = ','; //wrong should be char sepComma[] = ",";
char* token2 = NULL;
char* next_token2;

printf("Value in arrayofkeyvalue: %s", arrayOfKeyValue[0]);

for (size_t j = 0; j < count; j++)
{
token2 = strtok_s(arrayOfKeyValue[j], sepComma, &next_token2);
unsigned int index;
sscanf_s(token2, "%d", &index);

double value;
sscanf_s(next_token2, "%d", &value);

arrayDecimal[index] = value;

printf("res[%d] = %d\n", index, arrayDecimal[index]);
printf("\n");
}

return arrayDecimal;
}

最佳答案

您正在指定 char 常量 sepComma 作为 strtok_s 的第二个参数,其中 expects一串分隔符。

(并非如此)巧合的是,',' 的 ASCII 值为 0x2C。

关于C - strtok_s - 读取位置访问冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40717947/

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