Ниже приведены ошибки, которые я заметил в вашем коде.Вы написали
char temp [] = { a,s,d,f,g,h};
char * pointer1, *array1;
pointer1 = &temp;
memcpy (array1, pointer1, sizeof( temp) );
Теперь нет необходимости делать это pointer1 = &temp
, имя любого массива само по себе является указателем.Следовательно, вы можете просто сделать
<code>
char temp [] = { a,s,d,f,g,h};
char *pointer1;
memcpy (pointer1, temp , sizeof( temp) );
Но подождите!
Достаточно ли указателя 1 для хранения содержимого temp []?В вашем коде вы не назначили пространство для pointer1, что может привести к сбою вашей программы.
Правильный способ сделать это -
<code>
char temp [] = { 'a','s','d','f','g','h'};
char *pointer1 = malloc( sizeof(char) * (sizeof( temp) + 1) );
memset( pointer1, 0x00, sizeof( temp) + 1 );
memcpy (pointer1, temp , sizeof( temp) );
здесь, прежде чем копировать любое значение в pointer1, мы убедились, что на нем достаточно места.
Нет необходимостидля приведения значения возврата malloc ().В sizeof( temp) + 1
1 добавлен нулевой символ.Затем мы сделали memset (), который заполнил память, на которую указывает указатель 1, нулевым.Просто хорошая и здоровая практика.
Тогда вы
memcpy ( pointer1 + sizeof(temp), pointer3, sizeof ( the temp array)
Опять же, у pointer1 достаточно места для содержимого pointer3?У вас есть область памяти, обозначенная pointer1 + sizeof(temp)
?Это тоже приведет к краху вашей программы.Теперь вы либо используете realloc()
, либо назначаете больший пробел указателю1 с помощью malloc()
на более ранней стадии.Почему sizeof ( the temp array)
здесь?Вам не кажется, что в указателе 3 должно быть количество байтов?
Наконец, в определении function1()
char *pointer2, *array2;
// Now i need to have pointer2 point to contents of array2.
pointer2 = &temp2;
return pointer2
Что делает array2
?Ничего такого!Тогда это должно быть удалено.Для возврата просто используйте
return temp2;
, что означает, что pointer2
также бесполезно.
Надеюсь, это поможет.