Я делаю клиент-серверный проект в Linux, и мне нужно объединить некоторые строки.
Я попробовал свой код в Visual Studio в Windows, и он отлично работает, но в Linux он дает мне какой-то мусор. У меня есть эта функция:
char* concat(char s1[], char s2[])
{
int tam = 0;
tam = strlen(s1);
tam += strlen(s2);
char *resultado = malloc(sizeof(char) * tam) ;
strcpy(resultado, s1);
strcat(resultado, s2);
return resultado;
}
Я читал, что проблема в отсутствии '\0'
, и я сделал это:
char* concat(char s1[], char s2[])
{
int tam = 0;
tam = strlen(s1);
tam += strlen(s2);
char *resultado = malloc(sizeof(char) * tam) ;
resultado[tam+1] = '\0';
strcpy(resultado, s1);
strcat(resultado, s2);
return resultado;
}
Первые 4 раза, когда я вызывал функцию, она работала (мусор пропал), но потом выдает `malloc(): повреждение памяти
Кто-нибудь может мне помочь?
tam
символов дляresultado
, а затем добавляете\0
символа вtam+1
. С индексами массива, основанными на 0, это означает, что вы на 2 превышаете выделенный лимит. - person   schedule 02.06.2015malloc()
ed ранее, вы можете возможно избежать копирования s1, используяrealloc()
с дополнительной длиной s2 (не забудьте убедиться, что есть место для дополнительного терминатора NUL). Затем просто добавьте s2 к перераспределенному s1. - person too honest for this site   schedule 03.06.2015