您好我正在尝试将二维数组的内容存储到一个临时数组中......怎么可能......我不想在这里循环,因为它会增加额外的开销..任何指针符号会很好。
struct bucket
{
int nStrings;
char strings[MAXSTRINGS][MAXWORDLENGTH];
};
void func()
{
char **tArray;
int tLenArray = 0;
for(i=0; i<TOTBUCKETS-1; i++)
{
if(buck[i].nStrings != 0)
{
tArray = buck[i].strings;
tLenArray = buck[i].nStrings;
}
}
}
The error here i am getting is:-
[others@centos htdocs]$ gcc lexorder.c
lexorder.c: In function âlexSortingâ:
lexorder.c:40: warning: assignment from incompatible pointer type
如果需要更多解释,请告诉我......
答案 0 :(得分:3)
您可以使用memcpy
或将其包装在struct
中并使用结构上的赋值,但无论如何,您都可以有效地循环遍历所有元素。这是根本的。
答案 1 :(得分:1)
编译器问题是符号数组[...] [...]与char * *不同。 char **表示法是指向指针的指针。
例如;
char ** pA;
pA = malloc(10);
pA [0]是一个指针
在数组[...] [...]
的情况下array [0]不是指针。这是一个炭。
如果你想做你正在尝试的事情那么你需要将字符串声明为char **并像这样初始化你的结构。
struct bucket
{
int nStrings;
char** strings;
};
struct bucket buck;
buck.strings = (char **)malloc(MAXSTRINGS);
for(i = 0; i < MAXSTRINGS; i++)
buck.strings[i] = (char*)malloc(MAXWORDLENGTH)
答案 2 :(得分:0)
你的意思是克隆阵列吗?
不幸的是,我不认为有一种方法可以在C中克隆一个数组而不循环遍历数组中的所有项目并在其他地方复制它们。
主要的问题是,因为它们是指针,所以你只需复制内容就可以复制地址而你会有一个引用,而不是克隆。