Я думаю, что с этого раздела что-то не так:
// convert show_version_library_actual2 to char*
char* lib2;
lib2 = &show_version_library_actual2[0];
Это ничего не конвертирует. Он объявляет указатель на символ lib2 и устанавливает его значение в качестве адреса первого символа в массиве show_version_library_actual2 char. В этом нет ничего плохого, но конверсия не происходит.
Последовательность:
// array counter
char* library_actual[100] = {
lib2
};
ничего не считает. Он устанавливает массив из 100 указателей на символ. Вы инициализируете его только с 1 значением - указателем на первый символ в массиве символов show_version_library_actual2. Остальные 99 значений в массиве неинициализированы.
Следующий цикл:
char* p;
while (p != '\0')
{
n++;
p = library_actual[n];
}
, вероятно, не то, что вы намеревались, поскольку он имеет дело с в основном неинициализированным массивом. Он возвращает 1, но только потому, что library_actual [0] (lib2 = первый символ массива show_version_library_actual2) не равен нулю, поэтому цикл заканчивается.
Я не уверен, как именно вы намеревались идентифицировать фрагменты данных. Возможно, вы подумали, что, добавив запятые, вы получите отдельные строки. Если это то, что вы хотели, вы должны помнить, что в C / C ++ ничего подобного не произойдет само по себе. Назначения, как правило, просто так - никакого преобразования не произойдет, как это может произойти во многих других языках.
Если вам нужно получить отдельные строки, вам нужно это сделать. Если вы просто хотите посчитать, сколько раз встречается запятая, это довольно просто. Например, вы можете сделать:
char *p = lib2;
int n = 0;
while(*p != '\0')
{
if(*p == ',')
++n;
}
При этом n будет представлять число запятых. В вашем примере это даст вам 2. Я оставлю это вам в качестве упражнения для случая, когда есть 2 элемента, но разделенные 1 запятой. Подсказка: иногда полезно добавить начальный или конечный разделитель для обеспечения согласованности обработки.