GMP无法应对领先的“+”?

时间:2009-01-19 07:51:20

标签: c gmp

考虑以下代码

// BOGP.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include "gmp-static\gmp.h"
#include <stdlib.h>         /* For _MAX_PATH definition */
#include <stdio.h>
#include <malloc.h>


#define F(x) mpf_t x; mpf_init( x );

int main(int argc, char* argv[])
{
    F(foo);
    char * buff;
    mp_exp_t exp;

    mpf_init_set_str( foo, "123", 10 );
    buff = mpf_get_str(NULL, &exp, 10, 0, foo);
    puts( buff );
    puts("\n");
    free(buff); 

    mpf_init_set_str( foo, "-123", 10 );
    buff = mpf_get_str(NULL, &exp, 10, 0, foo);
    puts( buff );
    puts("\n");
    free(buff); 

    mpf_init_set_str( foo, "+123", 10 );
    buff = mpf_get_str(NULL, &exp, 10, 0, foo);
    puts( buff );
    puts("\n");
    free( buff );

}

在第一个实例中,在mpf_get_str调用之后,buff包含“123”。 在第二个中,buff包含“-123”。 但在第三种情况下,buff包含一个空字符串(“”)。

这是使用GMP 4.2.4。也许我需要再次查看手册,但我认为领先的“+”将像领先的“ - ”一样处理。

1 个答案:

答案 0 :(得分:3)

据我所知,GMP manual中的任何地方都没有提及您的问题。但是,您可以直接检查mpf_set_str的代码,看它是否处理'+'。

我不知道你需要这种情况,但如果你真的需要一个字符来指示正/负,你可以利用这些函数忽略前导空格的事实,从而使用{{1 }}