我该怎么做?我遇到了分段错误。
void pass_array(char* arr[])
{
cout << arr[0] << " " << arr[1] << "\n";
}
int main()
{
#define NUM_ELEMENTS 10
#define CHAR_LEN 32
char arr[NUM_ELEMENTS][CHAR_LEN];
cin >> arr[0];
cin >> arr[1];
cout << arr[0] << " " << arr[1] << "\n";
pass_array((char**) arr);
}
我想在没有动态内存的情况下这样做。有可能吗?
我知道arr中有多少元素,但函数签名不能改变。
答案 0 :(得分:2)
这是不可能的。数组和指针是不同的。第char arr[NUM_ELEMENTS][CHAR_LEN];
行定义了一个连续的字符集;但是该函数期待一个指针列表。 arr
中没有指针。
编译此代码时,您应该遇到编译器错误。使用强制转换来抑制错误告诉编译器“Ssh,我知道我在做什么”。但是你不知道自己在做什么。
要在不更改函数签名的情况下执行此操作,您必须构建一个指针表,例如:
char *ptrs[NUM_ELEMENTS];
for (size_t i = 0; i != NUM_ELEMENTS; ++i)
ptrs[i] = arr[i];
pass_array(ptrs);
答案 1 :(得分:0)
您需要执行以下操作。
void pass_array(char* arr[])
{
std::cout << arr[0] << " " << arr[1] << "\n";
}
int main(int argc, _TCHAR* argv[])
{
#define NUM_ELEMENTS 10
#define CHAR_LEN 32
char arr[NUM_ELEMENTS][CHAR_LEN];
char *arr2[NUM_ELEMENTS];
std::cin >> arr[0]; std::cin.ignore(); // read the first string, discarding CR
std::cin >> arr[1]; // read the second string
std::cout << arr[0] << " " << arr[1] << "\n";
arr2[0] = arr[0]; // put address of first string into your argument array
arr2[1] = arr[1]; // put address of second string into your argument array
pass_array(arr2);
}
答案 2 :(得分:0)
目前尚不清楚是否要传递真正的多维数组(如矩阵),或者是否要传递指针数组。
矩阵的替代语法
char arr[number_of_rows][number_of_colums]
是
char (*arr)[number_of_columns]
作为预先初始化的指针数组的一个简单示例:
char *arr[5] = {"one", "two", "three", "four", "five"};
答案 3 :(得分:0)
如果您愿意使用C ++ 11或更新版本,这应该可行,std :: arrays比c数组更优选。
#include <array>
#include <string>
#include <iostream>
constexpr auto numElements = 10;
auto passArray(std::array<std::string, numElements> arr) -> void
{
std::cout << arr[0] << " " << arr[1] << std::endl;
}
auto main() -> int
{
std::array<std::string, numElements> arr;
std::cin >> arr[0];
std::cin >> arr[1];
std::cout << arr[0] << " " << arr[1] << std::endl;
passArray(arr);
return 0;
}