2016-05-08 3 views
-1

Я пытаюсь скопировать некоторые 2D-массивы строк в другой. У меня есть 2 массивы, которые выглядят следующим образом:Копирование 2D-массивов в C

char *tabA[SIZE]; 
char *tabB[SIZE]; 

Я хочу, чтобы скопировать tabA[indexA] в tabB[indexB] но strcpy(tabB[indexB], tabA[indexA]) не работает вообще, программа получает разбился (но компилятор не возвращает никаких ошибок).

+1

ли Вы, таНос() все, как нужно, прежде чем зЬгсру() ING? –

+0

Скопируйте указатель на память, на который он указывает? – 2501

ответ

1

зЬгсру (TABB [IndexB], Таба [Indexa]) не работает вообще, программа получает разбился

Возможно потому, что tabB[indexB] не инициализирован и содержать NULL или недействительный указатель.

Решение
Выделяют память tabB статически с помощью 2D-массив как char tabB[SIZE1][SIZE2] = {{0}}; или динамически for(i = 0; i < SIZE; ++i) tabB[i] = malloc(...); или с помощью strdup. В случае динамического распределения убедитесь, что вы free и не просачиваете память.

1

Я использую memcpy от string.h, прототип, как это:

void *memcpy(void *dest, const void *src, size_t n); 

В тетсру) функция копирует п байт из области памяти ЦСИ в памяти области Dest (.

Для получения более подробной информации ознакомьтесь с руководством пользователя memcpy, используя команду man memcpy на терминале.

#include <stdio.h> 
#include <string.h> 
#include <stdlib.h> 

const size_t SIZE=8; 

int main() 
{ 
    char *data[] = {"jan", "fev", "mar", "apr", "mai", "jun", "jul", "aug"}; 
    char *data2[SIZE]; 

    memcpy(data2, data, sizeof(char*) * SIZE); 

    for (int i = 0; i < 8; ++i) 
    printf("data = %s, data2 = %s\n", data[i], data2[i]); 

    return (0); 
} 
+1

@MohitJain 'sizeof (char *)' не 'sizeof (char)'. – fluter

0
tabB[indexB] = strdup(tabA[indexA]); 

работает отлично :)