char *host;
host = malloc(64 * sizeof(char)); /* spazio per 64 caratteri */
memset(host,0x00,host[63]);
我有一个疑问:指针可以被视为"数组"吗?
使用上面的代码,我是否将 NULL 放入 64 字节?(防止缓冲区溢出)
即使你的代码是正确的(参见@Dietrich的答案),它也不能防止缓冲区溢出。 我可以这样做:
strcpy(host, "A very large string that's definitely a lot longer than 64 characters, so it will cause you a great deal of misery");
在
C 中,指针可以看作是一个数组。 但是,您的代码是错误的。
正确版本:
char *host;
host = malloc(64); // sizeof(char) == 1, guaranteed by the standard
if (!host) abort(); // malloc can return NULL if it fails
host[63] = ' '; // put NUL byte into the last element of array
当你运行 memset(host, 0x00, host[63])
时,它会将存储在 host[63]
中的值作为长度传递给内存集。 这是一个错误,因为host
未初始化,host[63]
是垃圾,您不应该将垃圾传递给memset
。 如果你很幸运,你的程序会立即崩溃。 如果你运气不好,它就不会。
将