Ошибка конкатенации двух строк - PullRequest
0 голосов
/ 02 ноября 2011

Я получаю ошибку сегментации, когда пытаюсь объединить две строки, как показано в приведенном ниже коде:

EDITED

//global variables
char *result="hi";
char *temp;

size_t write_data(char *ptr, size_t size, size_t nmeb, void *stream)
{
  temp=(char *)ptr;

  while(*result)++result;

  while(*result++ = *temp++);

  return fwrite(ptr,size,nmeb,stream);
}

Что я делаю неправильноВот?

Спасибо

Ответы [ 2 ]

2 голосов
/ 02 ноября 2011

Вы сохраняете значения в адресе, указанном result, без инициализации result для указания ДОСТАТОЧНОЙ памяти, которую вы можете использовать для сохранения результата.Инициализируя результат как «Привет», вы выделили ему три байта.Этого недостаточно для хранения дополнительных данных, которые вы пытаетесь добавить в конце.

1 голос
/ 02 ноября 2011
while(*result)++result;   // 1

while(*result++ = *temp++);  // 2

К концу строки 1 результат достигает своего конца, а в строке 2 вы передаете result end и разыменовываете его.

char *result="hi";

result указывает настроковый литерал hi с завершенным нулем.Местоположения после нулевого завершения не являются допустимыми доступными местоположениями для доступа result.Но вы пытаетесь получить к ним доступ в строке 2.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...