нашел код
char string[]= "abc/qwe/jkh";
char *array[10];
int i=0;
array[i] = strtok(string,"/");
while(array[i]!=NULL)
{
array[++i] = strtok(NULL,"/");
}
И задался я целью сделать его более универсальным т.е. добавить динамическое выделение памяти.
#include
char *string = "Value1,123,Value2,456,Value3,789,"; // запятая в конце необходима
char **array_of_strings = NULL; // указатель на указатель строк
int i = 0;
long comma_counter = 0;
int eachLine = 0;
// считаем количество запятых, чтобы понять сколько нам нужно памяти
for (i = 0; i < strlen(string); i++) {
if (string[i] == ',') {
comma_counter++;
}
}
printf("Commas counted: %d
", (int)comma_counter);
array_of_strings = malloc(comma_counter * sizeof(char*)); // выделяем столько сколько насчитали
if (array_of_strings == NULL) {
printf("Memory allocation failed!");
exit(1);
}
И вот первая проблема. strok возвращает указатель, и мне его нужно записать в array_of_strings позиция 0.
Как записать строку в array_of_strings[0]?
---> = strtok(string, ",");
--->printf("%s
", array_of_strings[eachLine]);
--->while(*array_of_strings) // дальше надо делать снова вызов выделения памяти
--->{
---> array_of_strings = malloc();
---> array_of_strings[++i] = strtok(NULL, ",");
---> array_of_strings++;
--->}
// ну а это будущий вывод строк на экран
for (i = 0; i < comma_counter; i++) {
printf("%s
", array_of_strings[i]);
}
Ответ
Пример разбивки строк есть здесь. Часто пользуюсь этим ресурсом.
Что-то такое может быть:
char string[] = "Value1,123,Value2,456,Value3,789,";
int comma_counter=6;
char *pCh;
char **array_of_strings=(char**)malloc(sizeof(pCh)*comma_counter);
//переменная string изменится
int k=0;
char * pch= strtok(string, ",");
while(pch!=NULL)
{
array_of_strings[k] = (char*)malloc(strlen(pch)*sizeof(char)+1);
if (array_of_strings[k]==NULL) exit (1);
strcpy(array_of_strings[k], pch);
pch = strtok (NULL, ",");
k++;
if(k==comma_counter) pch=NULL;
}
printf ("%s
%s", array_of_strings[0],array_of_strings[comma_counter-1]);
//не забывайте освобождать память
for(int i=0;i
Комментариев нет:
Отправить комментарий