首页 > 解决方案 > 在 C 中使用 strtok 时访问冲突(使用 Visual Studio 2019)

问题描述

嗨 StackOverflow 社区,我在非常需要的时候来找你。

我的问题涉及使用“Visual Studio”IDE(2019)在 C 中使用 strtok()

这是我的代码:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>



int main()
{

    char num1 = "", num2 = "", num3 = "", num4 = "", num5 = "", num6 = "", num7 ="", num8 = "", num9 = "", num10 = "", num11 = "", num12 = "", num13= "", num14 = "", num15 = "", num16 = "";
    int int1, int2, int3, int4, int5, int6, int7, int8, int9, int10, int11, int12, int13, int14, int15, int16;
    FILE* file = NULL;
    fopen_s(&file, "sauv.txt", "r");

    char chaine[101] = "1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16";
    char* point = NULL;
    char* buffer = NULL;

    char rend[100] = { 0 };

    num1 = strtok(chaine, " ");
    printf("num = %s", num1);
    num2 = strtok(NULL, " ");
    printf("num = %s", num2);




    return 0;
}

这只是一个简单的测试程序来隔离我在一个更大的程序中遇到的这个问题。

这是我得到的错误: 错误

(在 TEST.exe 中的 0x7A3B1F4C (ucrtbased.dll) 处引发异常:0xC0000005:访问冲突读取位置 0xFFFFFF8C。)

据我所见,它与我的程序相关联,该程序试图访问无法访问或无法访问的目标(如数组的地址)。显然,这是由于未启动数组/指针或尝试访问定义为仅 [i] 长的数组的 [i+1] 值引起的。我看不出我的代码是如何发生的。

我还看到这是因为 strtok() 返回一个不可更改的值或类似的东西。

我正在尝试在“1”“2”“3”“4”中剪切字符串“1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16”......这里我只完成了代码得到“1”和“2”。

如果有人可以向我解释问题的根源是什么,那就太好了!

(我知道这可能来自我创建字符串的方式或类似的东西,但我已经尝试自己解决这个问题好几天了,它仍然让我感到困惑)

感谢您的回答!

标签: cstringvisual-studiostrtok

解决方案


推荐阅读