Я не думаю, что вы можете делать то, что хотите, с MPI. Я программист Фортран, так что медведь со мной, если мое понимание С немного шаткое. Кажется, вы хотите передать структуру данных, состоящую из 1 int и 1 строки (которую вы передаете, передавая местоположение первого символа в строке) из одного процесса в другой? Я думаю, что вам нужно будет пройти строку с фиксированной длиной, которая, следовательно, должна быть такой же, как любая строка, которую вы действительно хотите передать. Зона приема для сбора этих строк должна быть достаточно большой, чтобы получать все строки вместе с их длиной.
Возможно, вам захочется объявить новый тип данных MPI для ваших структур; вы можете их собрать и, поскольку собранные данные включают длину строки, извлеките полезные части строки в приемнике.
Я не уверен в этом, но я никогда не сталкивался с действительно переменными длинами сообщений, которые, как вам кажется, хотят использовать, и он сортирует себя как не-MPI-подобный. Но это может быть что-то реализовано в последней версии MPI, которую я просто никогда не спотыкался, хотя, глядя на документацию в режиме онлайн, это не похоже.
Используйте 'char s [0];' для массива переменной длины, а не 'char s [1];'. – kennytm
@KennyTM, s [0] дает «предупреждение C4200: используется нестандартное расширение: массив нулевого размера в struct/union». – Constantin
Ах MSVC. C99 поддерживается gcc, но не MSVC. – kennytm