Найти на форуме:
Loading




Закрытая тема
Показано с 1 по 3 из 3

Тема: MPI и передача строки в функцию

  1. #1
    Активист Denis-TiTaN Осквернитель Denis-TiTaN Осквернитель Denis-TiTaN Осквернитель Denis-TiTaN Осквернитель Denis-TiTaN Осквернитель Denis-TiTaN Осквернитель Denis-TiTaN Осквернитель Аватар для Denis-TiTaN

    Регистрация
    17.11.2007
    Адрес
    Украина
    Сообщений
    571
    Сказал(а) спасибо
    56
    Поблагодарили 71 раз(а) в 54 сообщениях
    Изображения
    1

    По умолчанию MPI и передача строки в функцию

    В общем проблема такова, что я не могу передать строку в функцию, где ее обрабатывает MPI и выводит. Функция просто не получает строку msg. Дело как я понимаю в указателях, но как правильно расставить их, я даже не знаю. Если можно помогите указать ошибки в программе:

    Код:
    #include <stdio.h>
    #include <mpi.h>
    #include <string.h>
    #include <iostream>
    #define MSGTAG 10
    using namespace std;
    
    void stn(int &a, char b[])
    {
    	MPI_Status status;
    	MPI_Comm_rank(MPI_COMM_WORLD, &a);
    	if (a == 0)
    	{
    		MPI_Send(b, strlen(b)+1, MPI_CHAR, 1, MSGTAG, MPI_COMM_WORLD);
    	}
    	else
    	{
    		MPI_Recv(b, 80, MPI_CHAR, 0, MSGTAG, MPI_COMM_WORLD, &status);
    		printf("Received: %s\n", b);
    	}
    }
    
    int main(int me, char *msg[])
    {
    	puts("String:");
    	fgets(*msg, 80, stdin);
    	MPI_Init(&me, &msg);
    	stn(me, *msg);
    	cin.get();
    	MPI_Finalize();
    	return 0;
    }
    
    Заранее спасибо.

    P.S. Как я понимаю, все упирается в MPI_Init. Если все указатели убрать, то выдает вот что:
    'MPI_Init' : cannot convert parameter 2 from 'char *[]' to 'char ***'
    Последний раз редактировалось Denis-TiTaN; 17.09.2011 в 16:21.

  2. #2
    Постоялец hammersoft Отступник

    Регистрация
    02.06.2007
    Сообщений
    319
    Сказал(а) спасибо
    0
    Поблагодарили 7 раз(а) в 5 сообщениях

    По умолчанию

    Имя массива - указатель на первый элемент массива, то есть если функция принимает параметр типа char*, это может быть просто имя массива char Bub[].
    А если у Вас массив массивов char* Buf[], то передавать можно какой- то элемент массива, например, Buf[0]. Да, непонятно, все-таки не зря C# придуман.

  3. #3
    Активист Denis-TiTaN Осквернитель Denis-TiTaN Осквернитель Denis-TiTaN Осквернитель Denis-TiTaN Осквернитель Denis-TiTaN Осквернитель Denis-TiTaN Осквернитель Denis-TiTaN Осквернитель Аватар для Denis-TiTaN

    Регистрация
    17.11.2007
    Адрес
    Украина
    Сообщений
    571
    Сказал(а) спасибо
    56
    Поблагодарили 71 раз(а) в 54 сообщениях
    Изображения
    1

    По умолчанию

    Ясно спасибо, закрывайте тему

Закрытая тема

Похожие темы

Метки этой темы

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
Херсонский ТОП   Рейтинг@Mail.ru МЕТА - Украина. Рейтинг сайтов

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112