C ++新手 - 无法获得指向数组的指针

时间:2012-10-21 03:23:31

标签: arrays pointers cin

尝试创建指向用户输入的数组(字符串)的指针。

这里我在我的班级中定义了我的指针和数组:

private:

char userWord[200];     // input word
char * userWordPtr; // Pointer to the beginning of the input word

以下是读取信息的函数:

void WordFont::inputWord()
{

    cout << "What word would you like to draw?\n"
         << "The useable characters are: A E I O U Y B C D L M N R S T\n" ;
    cout << "Please enter your word: ";
    cin.get(userWord, 200);
    cin.clear();
    cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');

    userWordPtr = &userWord;

}

用户输入一个单词,我的代码根据单词的字母执行某些操作(if if-else梯形图)。但是在将* Ptr传递给if-else梯形图时,当我递增指针的位置时,我无法获得if-else梯形图来识别null(/ 0)字符。使用'&amp;'我也会收到错误引用char数组开头的地址。我无法弄清楚为什么我会收到这个错误,以及为什么下面的if-else梯子不会退出直到'i'到达内存中的任何随机位置都有'/ 0'字符。如果我做一些像输入'AAA'这样简单的事情,它将会超过'/ 0'字符所在的第4个位置。

这是循环:

void WordFont::buildOutputArray(char * Ptr)
{

    length = 0;
    bool switchLooper = true;
    int i = 0;

    do
    {
        if(*Ptr + i == 'a' || *Ptr + i == 'A')
            constructA();
        else if (*Ptr + i == 'e' || *Ptr + i == 'E')
            constructE();
        else if (*Ptr + i == 'i' || *Ptr + i == 'I')
            constructI();
        else if (*Ptr + i == 'o' || *Ptr + i == 'O')
            constructO();
        else if(*Ptr + i == 'u' || *Ptr + i == 'U')
            constructU();
        else if(*Ptr + i == 'b' || *Ptr + i == 'B')
            constructB();
        else if(*Ptr + i == 'c' || *Ptr + i == 'C')
            constructC();
        else if(*Ptr + i == 'd' || *Ptr + i == 'D')
            constructD();
        else if(*Ptr + i == 'l' || *Ptr + i == 'L')
            constructL();
        else if(*Ptr + i == 'm' || *Ptr + i == 'M')
            constructM();
        else if(*Ptr + i == 'n' || *Ptr + i == 'N')
            constructN();
        else if(*Ptr + i == 'r' || *Ptr + i == 'R')
            constructR();
        else if(*Ptr + i == 's' || *Ptr + i == 'S')
            constructS();
        else if(*Ptr + i == 't' || *Ptr + i == 'T')
            constructT();
        else if(*Ptr + i == '\0')
            switchLooper = false;
        i++;
    }while(switchLooper);


}

这可能是一个容易出现的新手错误,我相信你会花很多时间注意其他问题,但是我非常感谢任何帮助。

谢谢, 汤姆

2 个答案:

答案 0 :(得分:4)

  

用户输入一个单词,我的代码根据单词的字母执行某些操作(if if-else梯形图)。但是在将* Ptr传递给if-else梯形图时,当我递增指针的位置时,我无法获得if-else梯形图来识别null(/ 0)字符。

实际上,您使用*Ptr + i所做的是:

  • 取消引用您的Ptr指针(您正在访问Ptr指向的地址处的值)
  • 然后您将i添加到地址Ptr
  • 中包含的值

Serge 给了你答案,你必须使用*(Ptr + i)来获得该地址的角色。

在这里,您正在移动Ptri”块的指针。

  

我使用'&amp;'也会出错引用char数组开头的地址。我无法弄清楚为什么我会收到这个错误,

char (或其他)的数组是“喜欢”一个指针(有一堆差异,但我让你很高兴发现它们),所以当你使用{{1它与str[i]完全相同。

  

为什么下面的if-else梯子不会退出直到'i'到达内存中的任何随机位置都有'/ 0'字符。如果我做一些像输入'AAA'这样简单的事情,它将会超过'/ 0'字符所在的第4个位置。

你不应该再遇到这个问题了。

如果用户输入200个字符怎么办?

答案 1 :(得分:0)

虽然您执行此操作的样式不合适,但修复方法是将所有*Ptr + i替换为*(Ptr +i)。我建议您阅读tolower()stricmp()函数

上的一些文档