Nie sądzę, że możesz zrobić całkiem, co chcesz z MPI. Jestem programistą z Fortranu, więc nie przejmujcie się, jeśli moje rozumienie C jest trochę niepewne. Chcesz, zdaje się, przekazać strukturę danych składającą się z 1 int i 1 napisu (który przekazujesz, przekazując lokalizację pierwszego znaku w ciągu) z jednego procesu do drugiego? Myślę, że to, co musisz zrobić, to przekazać ciąg o stałej długości, który miałby być tak długi, jak każdy z ciągów, które naprawdę chcesz przekazać. Strefa przyjęć do zbierania tych strun będzie musiała być wystarczająco duża, aby pomieścić wszystkie struny wraz z ich długościami.
Prawdopodobnie będziesz chciał zadeklarować nowy typ danych MPI dla twoich struktur; możesz je następnie zebrać, a ponieważ zebrane dane zawierają długość ciągu, odzyskaj użyteczne części ciągu w odbiorniku.
Nie jestem tego pewien, ale nigdy nie natknąłem się na naprawdę zmienne długości wiadomości, ponieważ wydaje się, że chcesz ich używać, a ich sortowanie jest podobne do MPI. Ale może to być coś, co zostało zaimplementowane w najnowszej wersji MPI, na którą nigdy się nie natknąłem, chociaż patrząc na dokumentację on-line nie wydaje się tak.
Użyj 'char s [0];' dla tablicy o zmiennej długości, a nie 'char s [1];'. – kennytm
@KennyTM, s [0] daje "ostrzeżenie C4200: niestandardowe rozszerzenie używane: zero-size array in struct/union". – Constantin
Ah MSVC. C99 jest poprawnie obsługiwane przez gcc, ale nie MSVC. – kennytm