Перейти к содержимому

Фото
- - - - -

копирование в С


  • Вы не можете создать новую тему
  • Please log in to reply
6 ответов в этой теме

#1 Fors

Fors
  • Пользователь
  • 328 сообщений

Отправлено 11 декабря 2006 - 16:04

Есть тут толковые С программеры? у меня маленькая проблема, которую я не могу своим слабым умом осилить.

Есть 2 указателя char * buffer1, char *buffer2

надо слить содержимое buffer2 в buffer1. Причем так, чтобы при free(buffer2) и последующему обращению к buffer1 не возникало проблем (копировать по значению, а не по ссылке).
memcpy() не подходит, т.к. я не могу (читать не умею) создать указатель на массив с каким-то офсетом.

сейчас есть вот что:
 int buffercat(char * buffer1, int startPos, char* buffer2, int len){
 	int nextStart = startPos;
 	int i;
 	for(i = 0; i < len; i++ ){
 		buffer1[nextStart] = buffer2[i];
 		nextStart++;
 	}
 	return nextStart;
 	
 }
при free(buffer2) и обращению к buffer1 прога падает.


Плиз хелп!
З.Ы. хреновый из меня кодер
З.Ы.Ы. в массивах не АСКИ символы, т.е. предлагать strcat() не нужно

Сообщение изменено: Fors (11 декабря 2006 - 16:06 )

  • 0

#2 V^v

V^v
  • Пользователь
  • 316 сообщений

Отправлено 11 декабря 2006 - 17:02

#define LEN 10

char *buf1 = malloc(LEN);
char *buf2 = malloc(LEN);

fill(buf1);

memcpy(buf2, buf1, LEN);
free(buf1);

//do stuff
//.

free(buf2);

Сообщение изменено: V^v (11 декабря 2006 - 17:03 )

  • 0
int main(void)

#3 Fors

Fors
  • Пользователь
  • 328 сообщений

Отправлено 11 декабря 2006 - 17:27

memcpy(buf2, buf1, LEN);

memcpy() не подходит, т.к. я не могу (читать не умею) создать указатель на массив с каким-то офсетом.

buf2 не обязательно должен быть пустым. Мне нужна конкатенация, а не простое копирование
  • 0

#4 V^v

V^v
  • Пользователь
  • 316 сообщений

Отправлено 11 декабря 2006 - 17:52

тогда
memcpy(buf2 + startPos, buf1, LEN);
но теперь для buf2 должо быть выделено достаточно памяти (LEN не хватит)
  • 0
int main(void)

#5 Fors

Fors
  • Пользователь
  • 328 сообщений

Отправлено 11 декабря 2006 - 19:51

memcpy(buf2 + startPos, buf1, LEN);


насколько я знаю С buf2+ startPos будет указывать на элемент массива, а не на ссылку
  • 0

#6 V^v

V^v
  • Пользователь
  • 316 сообщений

Отправлено 11 декабря 2006 - 19:57

в C вобще нет ссылок, есть указатели.
buf2 + startpos - это указатель на начало выделенной памяти + кол-во занятой памяти, то есть buf2 + startpos должен указывать на свободнуй память
  • 0
int main(void)

#7 Fors

Fors
  • Пользователь
  • 328 сообщений

Отправлено 11 декабря 2006 - 20:40

в C вобще нет ссылок, есть указатели.

sorry, used wrong word

попробовал, вроде компилятор не ругнулся.

Скорее всего я не дочитал спецификацию функции, спасибо за помощь. Тему можно закрыть
  • 0