Если const char *str
не является константой, вы можете вставить '\0'
, чтобы разбить строку на две части. При этом вам нужно будет сдвинуть и другие символы в правильное положение.
Более чистое решение состоит в том, чтобы использовать что-то вроде strdup
, чтобы сделать две копии строки, одну из которых вы заканчиваете досрочно, а другую - с которой копирование начинается частично:
, например
ss[0].z = strdup(str);
ss[1].z = strdup(strchr(str, '-'));
const size_t fist_part = strlen(str)-strlen(ss[1].z);
ss[0].z[first_part] = 0;
Обновление: Вы можете использовать это, даже с более чем одним '-'
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct s
{
char *z;
};
int main ()
{
struct s *ss;
ss = malloc(20 * sizeof(struct s));
const char *str = "Hello World-Bye Foo Bar-more-and-more-things";
int i = 1;
char *found = NULL;
ss[0].z = strdup(str);
while ((found = strchr(ss[i-1].z, '-'))) {
// TODO: check found+1 is valid!
ss[i].z = strdup(found+1);
*found = 0;
++i;
}
for(i = 0; i<6; i++)
printf("%s\n",ss[i].z);
return EXIT_SUCCESS;
}
На практике вы хотите быть более осторожными, чтобы избежать ошибок с неожиданным вводом данных, поэтому вы должны быть уверены, что обрабатываете:
- Там нет '-' символ
- Символ '\ 0' отсутствует
- ошибка выделения
Не забудьте free()
тоже!