Почему strcat в цикле добавляет содержимое второго массива (аргумента) в первый несколько раз, как показано на картинке.
char def_symb[4][20] = {"X", "\u03c3", "U"};
char unicode[10][20] = {"\u2081", "\u2082", "\u2083", "\u2084", "\u2085", "\u2086", "\u2087", "\u2088", "\u2089"};
int unkn_count = ui->spinUnBox->value();
int column_count = (unkn_count+1)*2 + unkn_count;
for (int i = 0; i < column_count - unkn_count; i++){
ui->initCondTable->setHorizontalHeaderItem(i, new QTableWidgetItem(strcat(def_symb[0], unicode[i])));
}
Хотелось бы чтобы индексы были пронумерованы по порядку...
Вы довольно странно используете функцию strcat. Данная функция (если верить документации) дописывает в конец первого аргумента строчку из второго аргумента, таким образом первая строчка всегда будет перезаписываться. Если же Вы не хотите менять строки из массива def_symb, то копируйте их предварительно в какой-то буфер, например вот так:
const char def_symb[4][20] = {"X", "\u03c3", "U"}; // добавьте const, если не планируете менять данную переменную - тем самым Вы избежите множества проблем
const char unicode[10][20] = {"\u2081", "\u2082", "\u2083", "\u2084", "\u2085", "\u2086", "\u2087", "\u2088", "\u2089"};
int unkn_count = ui->spinUnBox->value();
int column_count = (unkn_count+1)*2 + unkn_count;
for (int i = 0; i < column_count - unkn_count; i++){
char buf[100];//буфер для строк, его размер можете выбрать самостоятельно, я ради примера указал там 100
strcpy(buf, def_symb[0]);
strcat(buf, unicode[i]);
ui->initCondTable->setHorizontalHeaderItem(i, new QTableWidgetItem(buf));
}
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости