我无法理解为什么我在下面的函数中获得以下消息(在Visual Studio 2015中)。
0xC0000005:访问冲突读取位置0x0000002C。
我已阅读this answer,但对我没有帮助。
这段代码是关于什么的。
有一串整数分为"索引,值"对。索引是唯一的。每组用分号分隔。例如:1,2; 3,5; 2,2; 3,4
我试图在其索引处获得每个值的int数组。
我的代码到目前为止提取字符串并将其放入char* buffer
然后我将" index,value"组分开。通过分号并将它们存储在char** arrayKeyValue
中,struct inputElement
是strtok_s
的成员。另一个struc成员是一个int,表示" index,value"数组中的组。我使用函数" separateStringBySemicolon"。
然后我尝试将每组"索引,值"进入一个新的数组,在每个"索引"将匹配其"值"。我通过将我的结构传递给函数" separateKeyValue"来实现这一点。我使用token2 = strtok_s(arrayOfKeyValue[j], sepComma, &next_token2);
,但收到错误。
第一次调用下面的函数(token2
)会出现错误。我知道无法访问next_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;
}
,但我不确定。如果是这样,为什么?
{{1}}
答案 0 :(得分:1)
您指定char
常量sepComma
作为strtok_s
的第二个参数,其中expects是一个分隔符字符串。
(不是这样)巧合的是,','
的ASCII值是0x2C。