【发布时间】:2015-05-08 12:18:00
【问题描述】:
我想创建一个数组,它是两个数组的笛卡尔积。比如:
const char *first[] = {"1", "2","3"};
const char *second[] = { "a" , "b" , "c", "e"};
结果是数组:
Cartesian = {"(1,a)","(1,b)","(1,c)",....};
这是我现在拥有的:
int main(int argc, const char * argv[]) {
const char *first[] = {"1", "2","3"};
const char *second[] = { "a" , "b" , "c", "e"};
int size = sizeof(first) * sizeof(second);
char *both[size];
int i=0;
for (int f=0; f<sizeof(first); f++) {
for (int s=0; s<sizeof(second); s++) {
char *temp[size];
strcpy(temp[s], "("+first[f]+ ","second[s]+")");
both[i] = temp;
i++;
}
}
return 0;
}
【问题讨论】:
-
你的问题是?
-
strcpy(temp[s], "("+first[f]+ ","second[s]+")");?您不能使用+运算符连接字符串。temp[s]没有分配内存。分配内存后使用sprintf(temp[s], "(%s,%s)",first[f],second[s]);。 -
sizeof(first)-->sizeof(first) / sizeof(*first) -
在执行此操作之前,您必须研究数组的工作原理。 C 没有魔术字符串类,它需要在有效的读/写内存中分配数组。你的代码没有分配任何内存,所以程序充其量会崩溃。
标签: c arrays cartesian-product