c++ - 为什么在使用 char 指针 str1 而不是 str 时会出现分段转储?

标签 c++ pointers char gmp

我使用此代码创建一个 Padding RSA 函数。不幸的是在替换时

mpz_get_str(str, base, N.get_mpz_t());
cout<<"\n\nLength of k = Modulus in bytes: "<<strlen(str);

str 和 str1 我收到分段转储。为什么会这样?

int main(const int argc, const char *const argv[])
{
// Check number of arguments
if (argc!=4){
printf("usage: %s [Message] [Exponent] [Modulus] \n", argv[0]);
return 1;
}
char *str;
char *str1="";
int base=10,l;
mpz_t op;

// Receive arguments
const mpz_class m(argv[1]), d(argv[2]),N(argv[3]),message(argv[1]);
mpz_get_str(str1, base, N.get_mpz_t());
cout<<"\n\nLength of k = Modulus in bytes: "<<strlen(str1);

// Calculate RSA
cout<<endl<<RSA(m,d,N);

//TestArea
cout<<"\n\n"<<m;
mpz_get_str(str, base, m.get_mpz_t());
cout<<"\n\nLength of string message in bytes: "<<strlen(str);
cout<<"\n\n"<<str;
return 0;
}

最佳答案

有两个错误(至少)。您已将字符串文字传递给 mpz_get_str。

char *str1="";
mpz_get_str(str1, base, N.get_mpz_t());

字符串文字是不可修改的。

其次,即使字符串文字是可修改的,您也没有分配足够的内存来保存您的号码。

第三个错误是概念性的。看起来你想找出N占用的字节数,这段代码,即使在运行时,也不会告诉你。

下面是判断N占用字节数的代码

size_t num_bytes = mpz_size(N.get_mpz_t())*sizeof(mp_limb_t);

num_bytes 将是 GMP 内部用来存储数字 N 大小的字节数。

关于c++ - 为什么在使用 char 指针 str1 而不是 str 时会出现分段转储?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57552024/

相关文章:

c++ - 如何将 char 类型数组传递给函数并将第一个 char 数组复制到第二个图表数组并使用 C++ 进行比较?

将十六进制字符串(char[])转换为int?

c++ - 消除函数指针和指向类实例的指针之间的歧义

c - 回复 : Struct Array with Varying Size Structs--Clarification

c++ - 减少整体计算时间

c - C中数组指针的奇怪行为

c - 如何订购相互使用的 C 结构/函数声明?

C - 通过函数传递数组

c++ - 使用 std::function 对象指向 C++11 中较大容器中结构的单个组件的迭代器

c++ - 任何程序都会检测到 C/C++ 结构中的缓冲区溢出吗?