c - 在 C 中通过 mpi 发送已知大小的字符串

标签 c string mpi

我是如何通过 MPI 发送和接收来学习发送整数的,但事实证明,以这种方式发送字符串的过程更加复杂。 我的尝试失败了:

    char value="10@1";
    /rank 0/
    MPI_Send(&value, value.size(), MPI_CHAR, 1, 0, MPI_COMM_WORLD);

    /rank1/
    MPI_Recv(&value, 1, MPI_CHAR, 0, 0, MPI_COMM_WORLD, &status);
    printf("%s",value);

我该怎么做?如果有帮助,接收方知道字符串的大小。

理想情况下,如果有人可以提供从等级 0 到 1 的字符串“10@1”的示例。

最佳答案

您的问题似乎出在这里:

char value="10@1";

正确的代码应该是:

char* value="10@1";

解释:单个字符不能包含字符串。如果代码编译通过,字符串的第一个字符的地址将被分配给字符变量。事实上,即使是 32 位或 64 位地址也无法放入一个字节字符中。

从您尝试调用的 size() 方法来看,您似乎受到了 C++ 中可用的字符串类的影响。

string value="10@1"; // This is OK but not C anymore.

关于c - 在 C 中通过 mpi 发送已知大小的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30288746/

相关文章:

c - 在C中,node.next->prev与node->next->prev相同吗?

c++ - MPI 和集群

创建二叉树并通过引用传递节点

c - while(1) 真的是无限的吗?

regex - 当定界符出现在字符串的开头时,在 Perl 中使用正则表达式拆分字符串

c - 发现数组中的任何值是否与给定值匹配

compiler-errors - 设置代码::Blocks to compile MPI programs with MPICC.exe

c++ - MPI_Bcast c++ STL vector

c - 如何在 linux 上从 c 中的 icmp 回复中提取 mac 地址

c# - 在 Azure Function Service Bus 触发器中使用异步方法