转换长多长双

fc6*_*c67 0 c c++ type-conversion

我试图将长长矩阵的第一行转换为long double,但是当我打印结果时它只打印0.这是功能:

void convertLLtoLD(long long **B, long double **C, int n){
    int i, j;
    for (i = 0; i < n; i++) {
        for (j = 0; j < n; j++) {
            C[i][j] = 0;
        }
    }

    for (i = 0; i < n; i++) {
        C[0][i] = B[0][i]; //C[0][i] = (long double)B[0][i];
    }
    for(i = 0; i < n; i++)
        printf("%lf ", C[0][i]);
}
Run Code Online (Sandbox Code Playgroud)

这是我在调用函数之前分配C的代码:

long double** C = (long double**)malloc(n * sizeof(long double*));

for (i = 0; i < DIM; i++) {
    C[i] = (long double*)malloc(n * sizeof(long double));
}
Run Code Online (Sandbox Code Playgroud)

我正在用GCC 4.8编译代码.从文件中读取B并且它的值是正确的,因为我在调用函数之前打印它们.即使我在函数内部打印它们,结果也是一样的.当我在评论中使用强制转换时,结果也是一样的.有人可以解释我为什么不工作?

谢谢

qua*_*dev 5

在声明中:

printf("%lf ", C[0][i]);
Run Code Online (Sandbox Code Playgroud)

您使用不正确的说明符(它期望a double).

使用%Lf打印long double,使用%lld打印long long.

注意:

  • 你是对的,它不是UB,`l`被明确定义为"对后续的a,A,e,E,f,F,g或G转换说明符没有影响." (C99 7.19.6.1 p.7/C11 7.21.6.1 p.7). (2认同)