我遇到了数组指针的问题。我看过谷歌,到目前为止,我的尝试都是徒劳的。
我想做的是,我有一个字符名称[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;
}
如何实际遍历指针数组?
答案 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::string
和std::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::string
和std::vector
的示例看起来比char *
的数组简单,但我认为是YMMV。