Здравствуйте.
Есть функция в которой есть две переменные для массивов - buff и trans_rate:
void rate_coin(char *coin)
{
FILE *rat_coi;
char *buff = (char*) malloc(128 * sizeof(char));
snprintf(buff, (int)strlen(coin) + 59, "%s%s%s", "curl https://api.coinmarketcap.com/v1/ticker/", coin, "/ 2>/dev/null");
printf("Coinmarketcap: %s\n", buff);
rat_coi = popen(buff, "r");
if(rat_coi == NULL) error_log("rat_coi!");
char trans_rate[128] = {0,};
//char *trans_rate = (char*) malloc(128 * sizeof(char));
int count = 0;
strcat(trans_rate, "RATE COIN\n");
memset(buff, 0, 128);
while(fgets(buff, 126, rat_coi) != NULL)
{
count++;
if(count > 8) break;
if(count == 4 || count == 7 || count == 8)
{
char *pch = strtok(buff, " ,\"");
while(pch != NULL)
{
char *ptr = strchr(pch, ':');
if(ptr!=NULL) *ptr = ' ';
strcat(trans_rate, pch);
pch = strtok(NULL, " ,\"");
}
}
}
trans_rate[strlen(trans_rate) - 1] = 0;
SendMessage(glob_chat_id, trans_rate);
free(buff);
printf("%s\n\n", trans_rate);
//free(trans_rate);
}
Для переменной buff делаю malloc, использую её в функции snprintf(buff, ...). После этого очищаю buff с помощью memset(buff,...), использую её же в функции while(fgets(buff,...) и в конце освобождаю память - free(buff);.
Для переменной trans_rate выделяю нужное кол-во байт и использую её.
Всё работает хорошо.
Если же для переменной trans_rate тоже делать malloc (строчка закомментирована) вместо char trans_rate[128] = {0,};, то прога начинает вести себя непредсказуемо, как будто перекрываются массивы (в printf попадают непонятные символы):
h�"�WRATE COIN
Объясните пожалуйста, почему в данном случае для buff malloc работает, а для trans_rate нет?