在C ++中返回一个比较的char指针数组

时间:2015-02-22 13:06:37

标签: c++ arrays pointers

我在上大学,我们正在学习指针。我们的工作是输入一个char,将它与一个数组进行比较,并返回一个指向该数组中该char的第一个引用的指针。但是,由于我不喜欢简单的事情,我已经问过我的老师,在阵列中不止一次使用这个字符。 这就是我头痛的开始。 所以我有这个代码。我们的想法是:创建一个函数,将输入字符串与整个数组进行比较,获取引用的指针并将它们保存在数组中并返回该数组。 不幸的是,它没有按我的意愿工作:( 什么可能是错的?

#include<iostream>
#include<cstdlib>
using namespace std;
char list [10];
int main()
{
    initialize();
    show();
    cout<<search('1');
}
void initialize()
{
    int i;
    for(i=0; i<10;i++)
    {
        list[i]='1';
    }
}
void show()
{
    int i;
    for(i=0; i<10;i++)
    {
        cout<<list[i];
    }
}
int* search(char* input)
{
    int* result[10];
    int i;
    char *temp;
    for (i=0; i<10; i++)
    {
        *temp=list[i];
        if(strcmp(temp, input) != NULL)
        {
            result[i]=i;
        }
    }
    return result[];
}

1 个答案:

答案 0 :(得分:0)

我在移动设备上,所以不幸的是我不能详细介绍,但是你要返回一个指向你在函数中创建的数组的指针,该数组在结束时超出了范围。功能

我的大量编辑:

正如大家已经说过的,C ++数组实际上只是指向数组中第一个元素的指针。因此,如果返回指向在函数范围内创建的数组的指针,则返回指向垃圾的指针。如果我这样做,我会使用vector,但如果我被迫使用数组,我会使用类似下面的代码。希望这有帮助!

#include <iostream>
#include <cstdlib>

void initialize(char* list) {
    for(int i = 0; i < 10; ++i) {
        if(i < 4) {
            list[i] = '2';
        } else {
            list[i] = '1';
        }
    }
}

void show(char *list) {
    for(int i = 0; i < 10; ++i) {
        std::cout << list[i] << ' ';
    }
    std::cout << std::endl;
}

// Note the function requires an additional argument that is a pointer
// this is how you can avoid returning a pointer
int search(char input, char* list, char* result) {
    int j = 0;
    for(int i = 0; i < 10; ++i) {

        // comparing characters can be done via ==

        if(input == list[i]) {

            *(result + j) = list[i];

            // You could use result[j], but I used this to show that
            // result really is just a pointer to the first element
            // of the array. As a result saying result[j] is the same
            // as saying I want to deference j elements past the first
            // element or *(result + j)

            ++j; // increment j
        }
    }
    // return how many elements matched
    return(j);
}

int main(int argc, char *argv[]) {
    char list[10];
    char temp[10];

    initialize(list);
    show(list);
    int size = search('1', list, temp);

    // create a dynamically sized array containing space for each match
    // because we don't know the size at compile time we must use
    // a library type or a dynamically sized array
    char *result = new char[size];

    for(int i = 0; i < size; ++i) {
        result[i] = temp[i];
        // again you could use result[i]
        std::cout << *(result + i) << std::endl;
    }
    delete[] result; // otherwise you'll get a memory leak
    return(0);
}