C++ 指针和字符数组问题

C++ 指针和字符数组问题,c++,pointers,c-strings,C++,Pointers,C Strings,好的,这段代码确实编译了,并且运行了,但是它没有为原始数组或反向数组提供正确的输出,只是胡说八道。我花了4个小时试着看看哪里出了问题(以前它根本不起作用,现在我让它至少输出了应该是C字符串的内容,我会胡言乱语)。有人请帮我看看哪里出了问题 #include <iostream> #include <cstring> using namespace std; char* getInput(); char* getReverse(char[], int); void di

好的,这段代码确实编译了,并且运行了,但是它没有为原始数组或反向数组提供正确的输出,只是胡说八道。我花了4个小时试着看看哪里出了问题(以前它根本不起作用,现在我让它至少输出了应该是C字符串的内容,我会胡言乱语)。有人请帮我看看哪里出了问题

#include <iostream>
#include <cstring>
using namespace std;


char* getInput();
char* getReverse(char[], int);
void displayResults(char *, char *);

const int MAX_SIZE = 21;

int main()
{
    //program to create a c-string and then output the reverse order
    char *original;
    char *reverse;
    original = getInput();
    int originalSize = strlen(original);
    reverse = getReverse(original, originalSize);
    displayResults(original, reverse);
    return 0;
}

/***************************************************
Definition of function- getInput:                  *
prompts the user to enter in a line of text to a   *
max amount of characters. Returns a pointer to the *
C-string array.                                    *
****************************************************/
char* getInput()
{
    char *originalptr;
    char original[MAX_SIZE];
    cout << "Enter a word or line of text up to a max of 20 characters\nand will     have it output in reverse!" << endl;
    cin.getline(original, MAX_SIZE);
    originalptr = original;
    return originalptr;
}

char* getReverse(char *reverseThis, int size)
{

    char* reverseOutput;
    char reverse[MAX_SIZE];
    int counter = 0;
    while(*reverseThis != '\0')
    {
        reverse[counter] = *(reverseThis + (size - counter));
        reverseThis++;
        counter++;
    }
    reverseOutput = reverse;
    return reverseOutput;

}

void displayResults(char *original, char *reverse)
{   
    cout << "\nYou originally entered: " << original << endl;
    cout << "In reverse order: " << reverse << endl;
}
#包括
#包括
使用名称空间std;
char*getInput();
char*getReverse(char[],int);
无效显示结果(字符*,字符*);
const int MAX_SIZE=21;
int main()
{
//程序创建一个c字符串,然后按相反顺序输出
字符*原件;
字符*反向;
original=getInput();
int originalSize=strlen(原件);
反向=获取反向(原始,原始大小);
显示结果(原始、反向);
返回0;
}
/***************************************************
函数-getInput的定义:*
提示用户将一行文本输入到*
最大字符数。返回指向*
C字符串数组*
****************************************************/
char*getInput()
{
char*originalptr;
原始字符[最大大小];

cout在“getReverse”中,您正在堆栈上分配变量“reverse”,这意味着当函数返回时,数据将消失,无论有多少指针引用该数据


我会在main中用“char reverse[MAX_SIZE];”声明“reverse”,然后让函数接受参数“char reverse[],然后函数将对其进行修改。

在“getReverse”中,您在堆栈上分配变量“reverse”,这意味着当函数返回时,无论有多少指针引用该数据,数据都将消失


我会在main中用“char reverse[MAX_SIZE];”声明“reverse”,然后让函数接受参数“char reverse[]“,函数将对其进行修改。

您将返回一个指向本地数组的指针。在函数
getInput
退出后,数组
original
将被销毁。因此
original
主要指向不再存在的东西,换句话说就是垃圾。
getReverse
也有同样的问题。

解决这个问题的一种方法是在main中声明数组,并将指向这些数组的指针传递给
getInput
getReverse
函数

int main()
{
    //program to create a c-string and then output the reverse order
    char original[MAX_SIZE];
    char reverse[MAX_SIZE];
    getInput(original);
    int originalSize = strlen(original);
    getReverse(original, originalSize, reverse);
    displayResults(original, reverse);
    return 0;
}

void getInput(char* original)
{
    cout << "Enter a word or line of text up to a max of 20 characters\nand will     have it output in reverse!" << endl;
    cin.getline(original, MAX_SIZE);
}

// etc
intmain()
{
//程序创建一个c字符串,然后按相反顺序输出
原始字符[最大大小];
字符反转[最大大小];
获取输入(原件);
int originalSize=strlen(原件);
getReverse(原始、原始大小、反转);
显示结果(原始、反向);
返回0;
}
void getInput(字符*原始)
{

cout您正在返回一个指向本地数组的指针。在函数
getInput
退出后,数组
original
被销毁。因此
original
主要指向不再存在的东西,换句话说就是垃圾。
getReverse
也有同样的问题

解决这个问题的一种方法是在main中声明数组,并将指向这些数组的指针传递给
getInput
getReverse
函数

int main()
{
    //program to create a c-string and then output the reverse order
    char original[MAX_SIZE];
    char reverse[MAX_SIZE];
    getInput(original);
    int originalSize = strlen(original);
    getReverse(original, originalSize, reverse);
    displayResults(original, reverse);
    return 0;
}

void getInput(char* original)
{
    cout << "Enter a word or line of text up to a max of 20 characters\nand will     have it output in reverse!" << endl;
    cin.getline(original, MAX_SIZE);
}

// etc
intmain()
{
//程序创建一个c字符串,然后按相反顺序输出
原始字符[最大大小];
字符反转[最大大小];
获取输入(原件);
int originalSize=strlen(原件);
getReverse(原始、原始大小、反转);
显示结果(原始、反向);
返回0;
}
void getInput(字符*原始)
{

cout您浪费了太多的字符和数据。为什么不试试这个: (我还没有测试过代码,但它必须工作,可能需要一些小的修改(如果有的话)

#定义最大尺寸20
void getinput(char*in)
{    
cin.getline(英寸,最大尺寸);
返回;
}
无效反转(字符*英寸);
{
int len=strlen(in);
char*store=in;

而(int i=0;i您浪费了太多的字符和数据。为什么不试试这个呢: (我还没有测试过代码,但它必须工作,可能需要一些小的修改(如果有的话)

#定义最大尺寸20
void getinput(char*in)
{    
cin.getline(英寸,最大尺寸);
返回;
}
无效反转(字符*英寸);
{
int len=strlen(in);
char*store=in;

虽然(int i=0;i您从
getInput
返回
&original
,这是未定义的行为顺便说一句。同样地,对于
getReverse
您从
getInput
返回
&original
,这是未定义的行为顺便说一句。同样对于
getReverse
谢谢!我知道这是很愚蠢的事情!一个小时后试着调试你可以很容易地忘记事情并忽略它们,特别是在仍在学习的时候!谢谢!我知道这是很愚蠢的事情!试着调试几个小时后,你可以很容易地忘记事情并忽略它们,特别是在仍在学习的时候!