2015-06-30 18 views
0

这更大的是从考试的一个问题:
这段代码总是工作?
的答案是: 的if语句检查“STR”的虚拟地址指向一个页面的开始,才把的strcpy应该被执行,它会工作,因为整个页面是此进程访问。
任何人都可以请解释我这个模棱两可的答案?非常感谢你strcpy的大小大于的malloc

int main() { 
    char *str ; 
    str = (char*) malloc (sizeof(char)*4); 
    if (((int)str) & 0x00000FFF) != 0) return 0; 
    strcpy (str ,"1234567890") ; 
    printf ("str=%s", str) ; 
    return 0; 
} 

回答

0

至于C标准去:这不起作用,未定义的行为。

至于实际的现实所说:这是行不通的。真正的malloc()实现可以并且每页都放置多个对象。尽管操作系统不会出现任何错误,但您将覆盖其他分配的对象和malloc()内部结构。

+0

但if条件实际检查的是什么? – Rawhi