首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >指针和Char数组问题

指针和Char数组问题
EN

Stack Overflow用户
提问于 2013-11-16 07:21:34
回答 3查看 106关注 0票数 0

好的,这段代码确实编译,并且运行,但是它没有为原始数组或反向数组提供正确的输出,只是胡言乱语。在过去的4个小时里,我一直在试图找出我哪里出了问题(它以前根本不起作用,现在我至少已经把它输出到了一个C-string的输出中,我就开始胡言乱语了)。谁来帮我看看我哪里出了问题。

代码语言:javascript
复制
#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;
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-11-16 07:36:15

在“getReverse”中,您要在堆栈上分配变量“反向”,这意味着函数返回时数据将消失,不管有多少指针引用该数据。

我会用'char _SIZE‘声明“反向”,然后让函数接受一个参数'char reverse[]',然后函数将修改该参数。

票数 2
EN

Stack Overflow用户

发布于 2013-11-16 07:36:17

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

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

代码语言:javascript
复制
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
票数 2
EN

Stack Overflow用户

发布于 2014-01-10 16:37:47

你浪费了太多的焦炭和数据。为什么不尝试这样做:(我还没有测试代码,但它必须工作,如果有的话,可能是小的修复)。

代码语言:javascript
复制
    #define MAXSIZE 20
    void getinput(char *in)
{    
   cin.getline(in,MAXSIZE);
return;

}
    void reverse(char *in);     
    {
        int len=strlen(in);
char *store=in;        
while(int i=0;i<len/2;i++)
{
char temp;
temp=*in;
*in=*(store+len);
in++;len--;
}
return;
    }
    int main()
    {
char data[MAXSIZE];
    getinput(data);
cout<<"Original :"<<data;
reverse(data);
cout<<"reverse"<<data;
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20015925

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档