char *的数组

时间:2010-05-28 16:02:15

标签: c++

我遇到了数组指针的问题。我看过谷歌,到目前为止,我的尝试都是徒劳的。

我想做的是,我有一个字符名称[256]。我将成为其中的10个。 因此,我需要通过指针跟踪每一个。

尝试创建指向它们的指针。

int main()
{
    char superman[256] = "superman";
    char batman[256] = "batman";
    char catman[256] = "catman";
    char *names[10];
    names[0] = superman;
    names[1] = batman;
    system("pause");
    return 0;
}

如何实际遍历指针数组?

5 个答案:

答案 0 :(得分:8)

names [0]是一个char *,无论你存储在names [0]中的是什么(在这种情况下是指向superman数组中第一个元素的指针)因此你猜测{{1}是正确的。

如果你想遍历那个数组,你需要知道何时停止,这样你就不会遍历你尚未初始化的指针 - 如果你知道你已经初始化了那些指针中的2个,你可以做,例如

cout << names[0] << endl;

作为替代方法,在您初始化的最后一个元素之后放置一个NULL指针(确保该空指针有空间),例如。

for(int i = 0; i < 2 ; i++) {
  std::cout << names[i] << std::endl;
}

答案 1 :(得分:7)

为什么不使用字符串和字符串向量来存储名称? SMPL:

#include <string>
#include <iostream>
#include <Vector>

//using namespace std;

int main(void) {
    std::string superman = "superman";
    std::string batman = "batman";
    std::vector<std::string> names;
    names.push_back(superman);
    names.push_back(batman);
    for (unsigned int i = 0; i < names.size(); ++i) {
        std::cout << names[i] << std::endl;
    }
    char c; std::cin >> c;
}

答案 2 :(得分:3)

char *names[] = { "superman", "batman", "whatever", NULL };

...

for (int i = 0; names[i] != NULL; i++)
    printf("%s\n", names[i]);

他可能不想使用矢量,因为他可能正在使用C而不是C ++。

编辑:我看到他用C +标记了它。

答案 3 :(得分:1)

使用任意固定长度的数组来操作字符串是完全没有的。在我的公司,这段代码是非法的,期间。 这种做法正是大多数安全漏洞的原因,而这正是使C / C ++(使用这种类型的代码)出了名的不安全的原因。 我强烈推荐“糟糕”的C ++解决方案。

答案 4 :(得分:0)

首先尝试使用std::string,这将减轻您的内存分配和释放问题 其次,使用std::vector<string>根据需要动态扩展。

如果您必须使用char *,则需要一系列指向char *的指针。
这被声明为:

char * array_of_C_strings [10]; //定义一个包含10个指向char *的指针的数组。

如果字符串是固定长度:

char array_of_fixed_length_C_strings [10] [256]; //最多10个C字符串的数组大小256。

分配:

char hello[32];
strcpy(hello, "Hello");
array_of_C_Strings[0] = hello;  // Note: only pointers are copied
strcpy(array_of_fixed_length_C_Strings[2], hello);  // Copy actual content of string.

std::stringstd::vector<std::string>

std::string hello = "hello";
std::vector<std::string> string_container;
string_container.push_back(hello);
string_container.push_back("world!");
std::cout << string_container[0]
          << ' '
          << string_container[1]
          << "\n";

使用std::stringstd::vector的示例看起来比char *的数组简单,但我认为是YMMV。