2017-07-02 13 views
0

私は実際には、配列の2つの "セル"を交換するために、2次元配列の文字列(実際には3次元配列にすることもできます)を試しています。C - Array content exchange

前に、私は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

コード内に2D/2次元(またはその他のX次元)配列はなく、one.Aを指すポインタも配列ではありません。そして、3スター( '***')のCプログラマであることは褒め言葉ではありません。それは悪いインタフェース設計の信号です。 – Olaf

答えて

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; 
+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; 
}