new和malloc都是分配地址,不同的是new分配在堆中能改变缓冲区大小,malloc不能改变缓冲区,分配在栈中。
OJ Practice
今天写代码的时候偶尔遇到了一个缓冲区溢出问题, 将其记下来后面再深入考虑一番
1 2 3 4 5 6 7 8
| // Input: 110 / 100 int main(int argc, char const *argv[]) { char s1[40]; char op[1]; printf("%d\n", scanf("%s%s", s1,op)); printf("%s\n", s1); }
|
输出s1发现没有东西, 这是因为op长度仅为1, 读入字符串写入了0, 恰好是s1的第1个字符,所以s1的第一个字符被置0了.
修改成下面的就没有问题了.
1 2 3 4 5 6 7 8 9
| // Input: 110 / 100 // Output: 110 int main(int argc, char const *argv[]) { char s1[40]; char op[2]; printf("%d\n", scanf("%s%s", s1,op)); printf("%s\n", s1); }
|
C++
下面的在C++面向对象中很常见
1
| void (*process) (char*); // 定义了一个函数指针process,该函数无返回值,接受参数char*
|
1 2 3 4 5 6 7 8 9 10 11 12 13
| int main() { chunk_t *next;
setbuf(stdin. NULL) //清理输入缓冲区 next = malloc(sizeof(chunk_t)); next->process = showlen;
printf("Enter value:"); gets(next->imp); // 从标准输入中得到串 next->process(next->imp); printf("buffers done!\n"); }
|
系统空转命令:9090
Comments
shortname
for Disqus. Please set it in_config.yml
.