Объединение двумерных строк с помощью strcat в цикле

313
03 мая 2017, 11:37

Почему 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])));
}

Хотелось бы чтобы индексы были пронумерованы по порядку...

Answer 1

Вы довольно странно используете функцию 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));
}
READ ALSO
Анализ загруженности кода

Анализ загруженности кода

Есть ли какие-нибудь инструменты для C++ на Windows, которые позволяют узнать, сколько раз программа выполнила какую-то строчку?

291
Масштабирование элементов QGraphicsItem

Масштабирование элементов QGraphicsItem

Пытаюсь создать графический редактор на QtДобавил на сцену графические элементы QGraphicsItem на сцену QGraphicsScene

567
запись в excel c++

запись в excel c++

Как можно записать данные в файл Excel, сначала создав этот файл? Также можно ли это сделать с помощью функции ofstream?

300
Поломка в Visual Studio 2017

Поломка в Visual Studio 2017

Доброго дняМожет кто-то уже столкнулся

470