2017-03-18 70 views
-9

的代码是从C代码写在下面解释这个和平的代码的含义: -任何人都可以从C

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

我们不是“解释我在互联网上找到的一些代码,或者是由不愿意解释的朋友给出的网站”。 – Olaf

+1

这段代码有很多问题 - “sizeof(char)”是多余的,不应该强制转换malloc的结果,永远不会释放内存,不会检查scanf中的返回代码,代码容易受到缓冲区溢出的影响,你缺少包含stdio.h和stdlib.h。代码没有任何意义 - 它读取输入然后退出。 –

回答

1

错误:

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

然后它将该值转换为char*并将生成的(无意义的)值分配给time

然后,仍然使用无意义的值,它试图存储一个读取值并将其解释为来自标准输入的整数。

然后它退出而不做任何事情。特别是它不使用读取或释放内存(可能)更早分配的值。

0

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

不要忘记在完成工作后内存应该是空闲的

syntax: free (time); 
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); 

在这一行,你尝试存储在timescanf()解读为整数输入一个值。你的格式说明符在这里是错误的。

然后程序终止,但没有释放你分配给它的内存,也没有对你用scanf()进行的任何操作做任何事情。