C Typecasting和malloc?

时间:2014-02-20 02:24:50

标签: c casting malloc free

所以我理解使用类型转换。使一种变量充当另一种变量。但每次我试图这样做都会打印钻石大声笑?

    #include <stdio.h>
    #include <strings.h>
    #include <windows.h>

    void loginscreen(void)
    {
         printf("\nWelcome to the login screen...\n");
         int num = 4;
         printf("%c", (char)num);
         getchar();
    }

我也可以得到malloc的解释以及它为什么以及如何使用类型转换。

2 个答案:

答案 0 :(得分:2)

您正在将号码4转换为ASCII character 4,恰好是EOT(传输结束)。这是一个特殊字符,表示输入结束。在类Unix系统中,可以通过在Windows中按 Ctrl + D Ctrl + Z )生成它。由于这是一个不可打印的字符,您的终端可能会将其显示为“ ”,替换字符用于替换未知或不可代表的字符。

解决你的另一个问题,malloc()基本上要求系统给你一大块内存。网上有很多精彩的资源,你可以找到很好的解释。

答案 1 :(得分:0)

转换(不是“类型转换”不会使一种变量充当另一种;它一种类型的值转换为另一种类型(或者可能转换为相同的类型)。

(指针转换可用于将对象重新解释为不同类型的对象。您的代码不会这样做。)

有些转换含蓄;其他人是明确的。强制转换是一个由带括号的类型名称组成的运算符;它指定了显式转换。 (没有隐含的演员阵容。)

在你的例子中:

printf("%c", (char)num);\

num(类型为int)的值将转换为char类型。然后立即将其转换(提升)回到类型int,因为当类型比int更窄的类型作为参数传递给类似printf的可变函数时,这就是行为。如果没有演员阵容,它的行为方式将完全相同:

printf("%c\n", num);

它打印值为4的字符,恰好是一个不可打印的控制字符。

您询问了malloc,但由于您的代码中没有调用malloc,这是(a)单独的问题,(b)它相当含糊。如果您对malloc有更具体的问题,可以单独发布。但首先,我建议阅读comp.lang.c FAQ的第7节,其中讨论了内存分配。 (特别是,你不应该转换malloc的结果;它是不必要的,并且在某些情况下可以掩盖错误。)