任何人都可以从c解释这种代码和平的含义

时间:2017-03-18 17:59:00

标签: c

代码来自C,代码如下: -

int main(){
    char* time = (char *)malloc(10240 * sizeof(char));
    scanf("%s",time);
    return 0;
}

3 个答案:

答案 0 :(得分:1)

错误:

因为malloc的范围没有原型,编译器会将结果(类型void*)解释为类型int

然后,它会将该值转换为char*类型,并将结果(无意义)值分配给time

然后,仍然使用无意义的值,它会尝试在那里存储一个读取值并从标准输入解释为整数。

然后退出而不再做任何事情。特别是它不会使用读取的值或释放先前分配的内存。

答案 1 :(得分:0)

它首先使用malloc函数从堆中动态保留内存,然后扫描字符串。注意fo%s转换说明符的格式:与之相关的参数是指针。(例如时间[0]。)

不要忘记工作完成后内存应该是免费的

syntax: free (time);

答案 2 :(得分:0)

char* time = (char *)malloc(10240 * sizeof(char));

在这里,您使用malloc()为您分配10240 * sizeof(char)个内存块。 sizeof(char)等于4个字节,因此默认情况下,您将10240 * 4 = 40960个内存块分配为int,因为您未在范围内指定任何原型(视为void*malloc()

然后将内存空间转换为char *,并*time指向分配给您的内存中的第一个块。

scanf("%s",time);

在此行中,您尝试将scanf()中的time的整数输入值存储为scanf()。你的格式说明符在这里是错误的。

然后程序会终止,而不会释放你在其中分配的内存,也不会对你使用yum install chrony 的内容做任何事情。