C语言 编译错误:“Stray 302”,在函数“int86”中

bkhjykvo  于 2023-05-06  发布在  其他
关注(0)|答案(1)|浏览(270)

我在代码块中编写了这个程序,但在int86(0x33, ®s, ®s);中出现了错误302。我的程序是:

#include <stdio.h>
#include <dos.h>
#include <conio.h>
#include <graphics.h>

void theend();

static int mask[] =
{
    /* Screen mask */
    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
    0x0000, 0x0000,

    /* Cursor mask */
    0x0000, 0x0000, 0x381c, 0x7c3e, 0x7c3e, 0x7c3e, 0x7c3e,
    0x3bdc, 0x07e0, 0x0ff0, 0x0ff0, 0x0ff0, 0x0ff0, 0x07e0,
    0x03c0, 0x0000
};

void main()
{
    int gdriver = DETECT, gmode, buttons;
    union REGS regs;
    struct SREGS sregs;
    initgraph(&gdriver, &gmode, "");
    regs.x.ax = 0;                    /* Initialize mouse */
    int86(0x33, ®s, ®s);
    setcolor(LIGHTCYAN);
    if(regs.x.ax == 0)
    {
        outtextxy(0, 0, "NO MOUSE AVAILABLE");
        getch();
        theend();
    }

    regs.x.ax = 9;                   /* Change cursor shape */
    regs.x.bx = 5;
    regs.x.cx = 0;
    regs.x.dx = (int)mask;
    segread(&sregs);
    sregs.es = sregs.ds;
    int86x(0x33, ®s, ®s, &sregs);
    regs.x.ax = 1;                   /* Show mouse pointer */
    int86(0x33, ®s, ®s);
    do
    {
        regs.x.ax = 3;
        int86(0x33, ®s, ®s);
        buttons = regs.x.bx & 3;
    } while(buttons != 3);

    regs.x.ax = 2;                   /* Hide mouse pointer */
    int86(0x33, ®s, ®s);
    theend();
}

void theend()
{
    closegraph();
}

我发现一些博客,它写了关于dos.h文件。查看dos.h文件是否已满?新的dos.h文件和旧的dos.h文件之间有什么区别吗?

l3zydbqr

l3zydbqr1#

我觉得你和你的编辑有问题。它将&reg更改为注册商标符号®,这是C程序中的无效符号。
编译错误“stray \302”表示程序中有无效字符。在你的例子中,字符是®。您应该将行int86(0x33,®s,®s)更改为int86(0x33, &regs, &regs);
对于函数调用int86,第二个参数是输入寄存器,第三个参数是输出寄存器。我想你正在尝试使用regs为两者。请注意,最好使用两个独立的变量作为输入和输出。Documentation for int86().

相关问题