Ich glaube nicht, dass Sie mit MPI ganz das machen können, was Sie wollen. Ich bin ein Fortran-Programmierer, also ertragen Sie mit mir, wenn mein Verständnis von C ein wenig wackelig ist. Sie wollen, so scheint es, eine Datenstruktur übergeben, die aus 1 int und 1 string besteht (die Sie weitergeben, indem Sie den Ort des ersten Zeichens in der string übergeben) von einem Prozess zum anderen? Ich denke, was Sie tun müssen, ist eine Zeichenfolge fester Länge zu übergeben - die daher so lang sein müsste wie eine der Zeichenfolgen, die Sie wirklich übergeben möchten. Der Empfangsbereich für das Sammeln dieser Saiten muss groß genug sein, um alle Saiten zusammen mit ihren Längen aufzunehmen.
Wahrscheinlich möchten Sie einen neuen MPI-Datentyp für Ihre Strukturen deklarieren; Sie können diese dann sammeln und, da die gesammelten Daten die Länge der Zeichenfolge enthalten, die nützlichen Teile der Zeichenfolge beim Empfänger wiederherstellen.
Ich bin mir nicht sicher, aber ich habe noch nie wirklich variable Nachrichtenlängen gefunden, wie Sie scheinen wollen, und es fühlt sich un-MPI-ähnlich an. Aber es könnte etwas sein, das in der neuesten Version von MPI implementiert wurde, über das ich noch nie gestolpert bin, obwohl es bei der Online-Dokumentation nicht so aussieht.
Verwenden Sie 'char s [0];' für das Array variabler Länge, nicht 'char s [1];'. – kennytm
@KennyTM, s [0] gibt "Warnung C4200: nicht standardmäßige Erweiterung verwendet: Null-Array in Struct/Union". – Constantin
Ah MSVC. C99 wird von gcc, aber nicht von MSVC unterstützt. – kennytm