所以我试图创建一个像:
这样的生成器#include <iostream>
#include <iomanip>
#include <cmath>
#include <stdio.h>
#include <stdlib.h>
using namespace std;
char* data;
void genRandomFilledChar(char *s, int i, int j, int k) {
const char alphanum[] =
"0123456789"
"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
"abcdefghijklmnopqrstuvwxyz";
for (int q = 0; q < i; ++q) {
for (int w = 0; w < j; ++w) {
for (int e = 0; e < k; ++e) {
s[e] = alphanum[rand() % (sizeof(alphanum) - 1)];
}
} }}
int main()
{
data = new char[10000][10000][10000];
genRandomFilledChar(data, 10000, 10000, 10000);
cin.get();
return 0;
}
但它无法编译。我做错了什么?
答案 0 :(得分:2)
你不能像你那样分配新阵列。您应该声明一个适当大小的一维数组或创建指向数组的指针数组。
char *data = new char [1000*1000*1000];
或
char ***data = new char**[1000];
for (int i=0; i< 1000; i++) {
data[i] = new char*[1000];
for (int j=0; j< 1000; j++) {
data[i][j] = new char[1000];
}
}
您在genRandomFilledChar
中也有错误。每次只填充10000个具有随机值的字符。
而且,最后一个。对于rand()
,您需要使用srand
初始化随机生成器。
答案 1 :(得分:1)
char* data;
// ....
data = new char[10000][10000][10000];
错了。首先,字符的三维数组是char***
。接下来,您需要分三步初始化该内存。
data = new char**[10000];
for(int i=0; i < 10000; ++i){
data[i] = new char*[10000];
for(int j=0; j < 10000; ++j){
data[i][j] = new char[10000];
for(int k=0; k < 10000; ++k){
// and for best performance, initialize directly
data[i][j][k] = /*HERE*/;
}
}
}
答案 2 :(得分:1)
s[e] = alphanum[rand % (sizeof(alphanum) - 1)];
应该是
s[q][w][e] = alphanum[rand % (sizeof(alphanum) - 1)];
因为它是一个三维数组
答案 3 :(得分:1)
由于new char[10000][10000][10000]
的类型为char (*)[10000][10000]
,而char*
的类型为data
。而且我认为你想要的是
void genRandomFilledChar(char *s, int i, int j, int k) {
const char alphanum[] =
"0123456789"
"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
"abcdefghijklmnopqrstuvwxyz";
for (int q = 0; q < i; ++q) {
for (int w = 0; w < j; ++w) {
for (int e = 0; e < k; ++e) {
s[e + w * k + q * j * k] = alphanum[rand() % (sizeof(alphanum) - 1)];
}
}
}
}
int main()
{
data = new char[10000 * 10000 * 10000];
genRandomFilledChar(data, 10000, 10000, 10000);
cin.get();
return 0;
}
答案 4 :(得分:1)
C多维数组只是一种自动计算索引的方法。 为什么不声明char数据[i * j * k](或从堆中获取新的),然后将其填充为单维度?稍后您可以将[] [] []索引与数据一起使用。