Не удается установить размер массива из другого массива - PullRequest
0 голосов
/ 02 марта 2019

У меня есть массивы (строки), и я хочу, чтобы второй был заполнен специальным символом (то есть '*') в зависимости от размера первого.Например, если первым является «ТЕСТ», то вторым должно быть «****»

Итак, у меня есть этот код:

int i;
char arr_1[ ] = "TEST";
char *arr_2 = NULL;

arr_2 = malloc( strlen(arr_1) * sizeof(arr_1) );

if(arr_2 ==  NULL)
{
    printf("\nCouldn't allocate memory !");
    exit(0);
}

for(i = 0; i < strlen (arr_1); i++)
{
    arr_2[ i ] = '*';
}

printf("The new string is : %s ", arr_2);

free(arr_2);

Проблема в том, что это на самом деле не работает,когда я запускаю его, я получаю "**** ■ @!"(звездочки и некоторые странные символы в конце).

Требуется помощь, спасибо

Ответы [ 2 ]

0 голосов
/ 03 марта 2019

Как прокомментировали другие, выделение для вашей строки недостаточно велико.С strlen вам нужно выделить strlen + 1.

arr_2 = malloc( strlen(arr_1) * sizeof(char) + 1);

Когда вы копируете вашу строку через цикл for, вам нужно NULL завершить строку.

  int i;
  for (i = 0; i < strlen(arr_1); i++) {
    arr_2[i] = '*';
  }
  arr_2[i] = '\0';

Приведенный выше код работает, потому что последнее, что делает цикл for, - это увеличение и сравнение i.Это означает, что i равен длине строки.Если вам нужно ограничить область действия i, оберните вышеуказанный код в do { ... } while(0);

При использовании malloc вы всегда должны предполагать, что выделенная память заполнена данными радиоактивного мусора.

0 голосов
/ 02 марта 2019

Вы выделяете больше памяти, чем требуется.Поскольку память не инициализирована, то после слова появляется мусор.

Использование:

malloc(sizeof(arr_1)/sizeof(arr_1[0]));
...