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

时间:2016-11-21 10:29:02

标签: c

我无法理解为什么我在下面的函数中获得以下消息(在Visual Studio 2015中)。

  

0xC0000005:访问冲突读取位置0x0000002C。

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

这段代码是关于什么的。
有一串整数分为"索引,值"对。索引是唯一的。每组用分号分隔。例如:1,2; 3,5; 2,2; 3,4
我试图在其索引处获得每个值的int数组。

我的代码到目前为止提取字符串并将其放入char* buffer 然后我将" index,value"组分开。通过分号并将它们存储在char** arrayKeyValue中,struct inputElementstrtok_s的成员。另一个struc成员是一个int,表示" index,value"数组中的组。我使用函数" separateStringBySemicolon"。

执行此操作

然后我尝试将每组"索引,值"进入一个新的数组,在每个"索引"将匹配其"值"。我通过将我的结构传递给函数" separateKeyValue"来实现这一点。我使用token2 = strtok_s(arrayOfKeyValue[j], sepComma, &next_token2);,但收到错误。

第一次调用下面的函数(token2)会出现错误。我知道无法访问next_token2double* 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}}

1 个答案:

答案 0 :(得分:1)

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

(不是这样)巧合的是,','的ASCII值是0x2C。