c++ - 为什么使用 char 指针 str1 而不是 str 时会出现分段转储?
问题描述
我使用此代码创建一个填充 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
。
推荐阅读
- python - 在工作世界中,构造函数的全球标准是什么?
- reactjs - 错误:未定义无法解析模块流(React Native)
- openshift - OpenShift:查看应用程序日志所需的最小角色集是什么?
- javascript - 如何使用文件的完整路径而不是文件的密钥从 S3 中删除文件
- javascript - 如何使用 js 打印复选框表?
- office365 - 将文本输入添加到图库项目
- django-forms - Django 分组选择字段迭代
- javascript - 如何在我的 Angular 项目中设计包含播放列表的视频播放器?
- jenkins - 将用户名和密码传递给Dimensions-Jenkins 作业
- kubernetes - 如何从 POD 中的另一个容器获取 Envoy (istio-proxy) 容器的 CPU 使用率