如何在数组中存储地址 - C ++?

时间:2015-02-11 11:17:27

标签: c++ arrays string pointers

My Code example:

char* array = new char[10];
char* str;
int j = 0;

MyClass(char* input){                  //input = sentence columns terminated by '\n'

   str = new char[strlen(input)];

   for(int i=0; i<strlen(input); i++){
      if (input[i] == '\n'){           //look for end of line
         str[i] = '\0';                //add \0 Terminator for char[]
         array[j] = &(str[i]);         //store address of sentence beginning in array
         j++;
      }
      else{
         str[i] = input[i];
      }
   }
}

如何将地址存储到数组中。所以我可以用数字得到句子的起始地址。我创建了一个带有向量的解决方案,将我的句子存储为char *对象。但是必须有一种没有载体的方法吗?!

编辑:

这是我的解决方案。

#include <iostream>

using namespace std;

class Pointer{

public:

    char** array = new char*[10];
    char* str;
    char* buffer;
    int j = 1;

    Pointer(char* input){
        str = new char[strlen(input)];
        array[0] = str;
        for (int i = 0; i < strlen(input); i++){
            if (input[i] == '\n'){
                str[i] = '\0';
                array[j] = &(str[i]) + sizeof(char);
                j++;
            }
            else{
                str[i] = input[i];
            }
        }
    }

    void output(int i){
        buffer = array[i];
        cout<<buffer;
    }
};

感谢您的帮助! :)

4 个答案:

答案 0 :(得分:1)

回答实际问题:

char ** array = new (char *)[10];

你应该做的事情是:

std::vector<std::string> array;

答案 1 :(得分:1)

最好的方法是使用std容器(std::vector<std::string>)。无论如何,如果你确实需要C方式:

在这一行:

array[j] = &(str[i]);

您正在存储字符串的 ith 字符的地址。如果要将指针存储到整个字符串,请使用:

array[j] = str;

请注意,您的代码中还有许多其他错误。 例如,您不应该使用常量大小的数组,因为如果文本中有更多行,您将面临未定义的行为风险。

顺便说一下。 MyClass是一个函数,而不是一个类。

答案 2 :(得分:0)

char* array[10]
char* str;
int j = 0;

MyClass(char* input){                  //input = sentence columns terminated by '\n'

    str = new char[strlen(input)];

    for(int i=0; i<strlen(input); i++){
        if (input[i] == '\n'){          //look for end of line
            str[i] = '\0';              //add \0 Terminator for char[]
            array[j] = str;         //store address of sentence beginning in array
            // or you can use
            // array[j] = &(str[0]);
            j++;
        }
        else{
            str[i] = input[i];
        }
    }
}

希望它有所帮助!

答案 3 :(得分:0)

class Pointer{

public:    
    Pointer(std::string input){
            addresses = split(input, '\n', addresses);
    }

    void output(int i){
            std::cout << addresses.at(i);
    }

private:

    std::vector<std::string> addresses;
};