我实际上正在尝试使用二维数组的字符串(事实上它可能是三维的)来交换数组的两个“单元”。
之前,我使用过memcpy,但是当来到长字符串时,执行时间很长,所以我认为可以简单地交换数组的指针,但我不知道该怎么做:(
这是我的代码:
#include <stdio.h>
#include <stdlib.h>
void fonction(unsigned char*** tab);
int main()
{
unsigned char*** tab;
tab = malloc(sizeof(unsigned char**) * 3);
if (tab == NULL)
exit(0);
for (int line = 0; line < 3; line++)
tab[line] = malloc(sizeof(unsigned char*) * 3);
for (int line = 0; line < 3; line++)
for (int column = 0; column < 3; column++)
tab[line][column] = malloc(sizeof(unsigned char) * 5);
for (int line = 0; line < 3; line++)
for (int column = 0; column < 3; column++)
for (int cell = 0;cell < 5;cell++)
tab[line][column][cell] = line * 3 * 5 + column * 5 + cell;
for (int i = 0;i < 32;i++)
fonction(tab);
for (int line = 0; line < 3; line++)
for (int column = 0; column < 3; column++)
free(tab[line][column]);
for (int line = 0; line < 3; line++)
free(tab[line]);
free(tab);
return 0;
}
void fonction(unsigned char*** tab)
{
unsigned char temp[5] = { 0, 0, 0, 0, 0 };
int alea = 0;
int alea2 = 0;
int alea3 = 0;
int alea4 = 0;
srand(58);
for (int line = 0; line < 3; line++)
{
for (int column = 0; column < 3; column++)
{
alea = rand() % 3;
alea2 = rand() % 3;
alea3 = rand() % 3;
alea4 = rand() % 3;
*temp = tab[alea][alea2];
tab[alea][alea2] = tab[alea3][alea4];
tab[alea3][alea4] = *temp;
}
}
}
在释放标签时出现错误,这是可以预料的,因为 fonction 做了任何旧事:)
提前致谢!
答案 0 :(得分:0)
我无法真正了解您尝试对代码执行的操作,但这是一个移动字符串指针的工作示例:
#include <stdio.h>
#include <stdlib.h>
#define STR_NUM 3
int main(void)
{
char * str1[STR_NUM] = {"one", "two", "three"};
char * str2[STR_NUM];
int i;
for (i = 0; i < STR_NUM; ++i)
puts(str1[i]);
for (i = 0; i < STR_NUM; ++i)
str2[i] = str1[i];
for (i = 0; i < STR_NUM; ++i)
puts(str2[i]);
return 0;
}
答案 1 :(得分:0)
我不确定你为什么要使用
unsigned char temp[5] = { 0, 0, 0, 0, 0 };
只需使用
char* temp;
并且交换为
temp = tab[alea][alea2];
tab[alea][alea2] = tab[alea3][alea4];
tab[alea3][alea4] = temp;