为什么我不能用字符串初始化这个指针?

时间:2013-12-06 09:45:07

标签: c string pointers

//a pointer to the first block of screen
int far *SCR = (int far *) 0xB8000000; 

(SCR +  6 * 80 + 31) += "HELLO HELLO HELLO";

在上面的代码中,我定义了SCR,它是指向文本模式下屏幕第一个块的指针。它工作正常,我可以在文本模式下在屏幕上写如下:

#define WHITE 3840
*(SCR +  6 * 80 + 31) = 'h' + WHITE;
*(SCR +  6 * 80 + 32) = 'e' + WHITE;
*(SCR +  6 * 80 + 33) = 'l' + WHITE;
*(SCR +  6 * 80 + 34) = 'l' + WHITE;
*(SCR +  6 * 80 + 35) = 'o' + WHITE;

但是当我想在屏幕上写一些东西时,当我尝试写下面的内容时,我看到下面代码中最后一行的Lvalue required错误:

#define WHITE 3840
for(int i = 31; i < 36; i++)
   *(SCR + 6 * 80 + i) = WHITE;
(SCR + 6 * 80 + 31) += "hello";

为什么我无法访问上面的指针以及如何使用我定义的指针SCR编写长单词和句子来解决问题?

2 个答案:

答案 0 :(得分:2)

你做不了类似的事情:

(SCR + 6 * 80 + 31) += "hello";

因为"hello"是一个指向char数组的指针,该数组已使用字符'h''e''l'等进行初始化。你不能添加指针指针(即使你被允许也不会对你的问题有意义。)

如果要将字符串输出到SCR指向的位置加上一些偏移量,请编写一个函数以减少它的痛苦。这就是函数的用途:

void write_to_screen( int row, int col, char const* s, int attr)
{
    int offs = row * 80 + col;

    for (;*s != 0; ++s) {
        SCR[offs++] = attr | *s;
    }
}

// call it like so:
write_to_screen( 6, 30, "hello", WHITE);

或类似的东西(你可能需要调整其中的细节以及如何写入属性和字符,因为我不记得在实模式下写入屏幕缓冲区的细节。)

答案 1 :(得分:0)

#define WHITE 3840
char *hello = "hello";
for (int i = 0; hello[i]; i++) {
    *(SCR + 6 * 80 + 31 + i) = WHITE + hello[i];
}
相关问题