gpt4 book ai didi

c++ - 坏指针? - C++

转载 作者:太空狗 更新时间:2023-10-29 21:08:54 25 4
gpt4 key购买 nike

我正在为使用指针的 C++ 家庭作业编写字符串标记化程序。但是,当我运行并调试它时,它说我的指针 pStart 无效。我感觉我的问题出在我的参数构造函数中,我在下面包含了构造函数和对象创建。

如果你能告诉我为什么它在我调试它时说 pStart 是一个坏指针,我将不胜感激。

谢谢!

StringTokenizer::StringTokenizer(char* pArray, char d)
{
pStart = pArray;
delim = d;
}

// create a tokenizer object, pass in the char array
// and a space character for the delimiter
StringTokenizer tk( "A test char array", ' ' );

完整的 stringtokenizer.cpp:

#include "stringtokenizer.h"
#include <iostream>
using namespace std;

StringTokenizer::StringTokenizer(void)
{
pStart = NULL;
delim = 'n';
}

StringTokenizer::StringTokenizer(const char* pArray, char d)
{
pStart = pArray;
delim = d;
}

char* StringTokenizer::Next(void)
{
char* pNextWord = NULL;

while (pStart != NULL)
{
if (*pStart == delim)
{
*pStart = '\0';
pStart++;
pNextWord = pStart;

return pNextWord;
}
else
{
pStart++;
}
}
return pNextWord;
}

函数 Next 应该返回指向 char 数组中下一个单词的指针。目前还没有完成。 :)

完整的 stringtokenizer.h:

#pragma once

class StringTokenizer
{
public:
StringTokenizer(void);
StringTokenizer(const char*, char);
char* Next(void);
~StringTokenizer(void);
private:
char* pStart;
char delim;
};

完整的 main.cpp:

const int CHAR_ARRAY_CAPACITY = 128;
const int CHAR_ARRAY_CAPCITY_MINUS_ONE = 127;

// create a place to hold the user's input
// and a char pointer to use with the next( ) function
char words[CHAR_ARRAY_CAPACITY];
char* nextWord;

cout << "\nString Tokenizer Project";
cout << "\nyour name\n\n";
cout << "Enter in a short string of words:";
cin.getline ( words, CHAR_ARRAY_CAPCITY_MINUS_ONE );

// create a tokenizer object, pass in the char array
// and a space character for the delimiter
StringTokenizer tk( words, ' ' );

// this loop will display the tokens
while ( ( nextWord = tk.Next ( ) ) != NULL )
{
cout << nextWord << endl;
}


system("PAUSE");
return 0;

最佳答案

您不能在分词器中修改pStart,因为C 和C++ 中的文字字符串是不可修改的,它的类型是const char *。当你做作业时

pStart = pArray;

在您的构造函数中,pStart 现在指向不可修改的内存。这很可能是你的问题。如果不是这种情况,您将需要发布更多代码。

编辑:查看您的编辑后,您似乎已将代码更改为使用数组。那挺好的。我没有太详细地查看您的代码,但至少有一个错误:

while (pStart != NULL)

应该是:

while (pStart != NULL && *pStart)

这是因为当您在字符串中点击终止符 '\0' 时,您希望停止循环。

我不确定您为什么要在 C++ 中使用 C 风格的字符串。这是你作业中的要求吗?

关于c++ - 坏指针? - C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2211875/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com