Краткий ответ: вы не можете с этим, потому что вы не учитываете символ \ 0 для завершения каждой строки.
Более длинный ответ:
Изменения имеют такую структуру, чтобы иметь больше гибкости:
struct myStruct {
struct myString *text;
}
struct myString {
char *part;
}
Распределение должно быть:
struct myStruct *allStruct = calloc(n, sizeof(struct myStruct));
Итак, у вас есть указатель / массив на n struct myStruct.
Затем инициализировать всех членов allStruct;
for( i=0; i<n; ++i )
{
allStruct[i].text = calloc(5, sizeof(myString));
// Following for only needed if you want new strings by using the strncpy (see above)
for( y=0; y<5; ++y )
{
allSTruct[i].text[y].part = calloc(101, sizeof(char));
}
}
Теперь у вас есть все инициализированные переменные.
Чтобы скопировать строку длиной 500 символов в allStruct [n]:
for( i=0; i<5; i++ )
{
allStructs[n].text[i].part = &text[i*100]; // If you want to point on the existing string
// OR
strncpy(allStructs[n].text[i].part, &text[i*100], 100); // If you want to have new strings
// In all case, terminate the string with '\0'
allStructs[n].text[i].part[100] = '\0';
}
Это должно сработать.