关于 scanf 和 scanf_s 的问题

最近作为程设基础的小教员,收到很多同学的求助,关于scanf和scanf_s的问题已经遇到了两次,特此写一篇博文来叙述一下这个问题。 一开始,有同学问我, char a; scanf("%c",&a); 为什么会报错?我说,vs 默认强制要求使用 scanf_s 函数,于是我建议这位同学把这个错误信息关掉了。嗯。经过百度,这位同学的问题解决了。 后来,又有一位同学问我, char a; scanf_s("%c",&a); 程序为什么会崩溃?我想了想,如果 scanf_s 和 scanf 是一样的行为,这段代码是没问题的。但 scanf_s 既然安全,必然是在字符串方面做了处理。这里的 char*勉强也算一个?网上一查,果然,应该写成scanf_s("%c",&a,1);,字符串则要写成scanf_s("%s",str,sizeof(str)),来保证缓冲区不会溢出。 但是,这样解决这个问题又面临着不同的选择: 学习scanf_s和scanf的不同,把所有scanf换成scanf_s并做相应的修改。 这样当然符合了语言进化的潮流,也会让 vs 闭嘴。但是,scanf_s 只有在 C11 标准中有,而且,根据cpprefrence.com 上关于 scanf 的描述,只有在__STDC_LIB_EXT1__被定义且在#include<stdio.h>之前#define __STDC_WANT_LIB_EXT1__才能确保使用scanf_s能使用,当然在 vs 较新版本中是默认可以使用的。但是,程设基础的作业是要丢到 oj 上的,而 oj 上的编译器不一定支持这些,所以这个选项不行。 坚持用scanf,自己按照题目要求保证缓冲区不溢出,同时让 vs 闭嘴。 网上已有教程,已经讲的很全面了,大家可以根据这个教程把 vs 教训一顿。为了能在 oj 里跑,建议用里面的方法五到八。(个人最推荐在文件头添加#define _CRT_SECURE_NO_WARNINGS) 以后再遇到这个问题,我就丢这个连接上来就好了咯。yeah!

Read More

一个搞笑的伸展树的 Wiki

光哲同学在群里发了这个链接,特别搞笑,特此分享: 伸展树 - 百度百科 伸展树(Spaly Tree,事实上在国内 IO 界常常被称作 Tajarn 发明的 Spaly Tree,与此同理的还有 Terap),也叫分裂树,是一种二叉排序树,它能在 O(n log n) 内完成插入、查找和删除操作。它由 Daniel Sleator 和 Robert Tajarn 发现,后者对其进行了改造。它的优势可以不断伸展枝干(一个月 2~3 次),从而使树冠散开,提高光合作用效率。木材坚硬,是重要的经济类乔木。与其他植物不同的是,伸展树可以进行出芽生殖,繁殖速度极快。

Read More

回顾昨天的酒井知识竞赛

昨天晚上,我作为蒟蒻组的一员在三教 2102 参加了酒井知识竞赛,并因此鸽掉了 TUNA 和 Lab mU 的迎新会 hhh,不过运气好拿到了二等奖的好成绩,获得 Paperang 便携打印机一台。中间遇到了好一些网络方面的知识,这对于没有记忆 OSI 模型的我无疑有巨大的难度。下面是几道比较有印象的题目: 以下哪个不是编程语言? A. J B. L C. R D. K 这题不难,R 肯定对,J 见过,K 略微有印象,选 B IPv6 链路层地址解析的协议是? A. ARP B. Neighbour Solicitation C. Neighbour Advertisement D. Neighbour Discovery 对于一个没研究过 IPv6 的人来说这只好蒙了。。。ARP 是 IPv4 时代的,ND(Neighbour Discovery 则是 IPv6 时代的新产物,把 ARP 和 ICMP 等协议的功能都包含了进来,并且有新的功能。之前样题里还出现过问 IPv6 中去掉了 Unicast,Anycast,Multicast,Broadcast 中的哪种,答案是 Broadcast。 第一个把程序错误称做 bug 的是? 选项太多忘了,答案是 Grace Hopper,因为当时一只飞蛾意外飞入了机器导致了故障,后来慢慢就流传下来了。 以下不是网络操作系统的是? A. Windows NT B. OS/2 warp C.

Read More

华为随行 WiFi 2 mini 开箱

前段时间,我办了 4G 升级,移动送了一张副卡,有不少免费的流量,由于我的手机是 iPhone 不支持双卡,老爸就借了我他的 GlocalMe 当成 MiFi 来用,不过呢 GlocalMe 放在这里当然是大材小用了,所以我就网购了华为随行 WiFi 2 mini,把我的副卡装上一个壳放进去就可以了!把这个 MiFi 插入电脑,会弹出一个目录,里面有 Win/Mac 的驱动安装文件,打开后在网络设置里就有 HUAWEI_MOBILE 的连接了,并自动打开网络配置界面。设置一下 SSID 和密码,就能正常使用了,手机连上也很正常,手机上可以下载 HUAWEI HiLink 来配置 MiFi,挺爽的。随赠的有联通的上网卡,不过我准备在北京买个上网卡放 MiFi 里面用。

Read More

In macOS Sierra, Karabiner-Elements finally support complex modifications

In favor of this commit, Karabiner-Elements now supports the much welcomed yet long-lost feature, namely complex modifications that enable users to trigger complex keypress. Now I can achieve this: If I press <Enter>, then: 1. If <Enter> is pressed alone, then send <Enter>. 2. If <Enter> is pressed along with other keys, then send <Control> + Other. By adding this code to ~/.config/karabiner/karabiner.json : "complex_modifications": { "rules": [ { "manipulators": [ { "description": "Change return_or_enter to left_control.

Read More

等时圆

最近学校老师讲了一下等时圆。先从这个题讲起: 在同一个地方向不同倾角光滑斜面用不同的初速度上滑,到达最高点所用时间相等,求最高点的轨迹是什么? A. 直线 B. 椭圆 C. 抛物线 D. 圆 当时做这个题目的第一想法是把 x 和 y 座标表示出来: $$ \frac{1}{2}gsin\theta{}t^2=l, y=lsin\theta, x=ycot\theta $$ 然后就傻眼了,并得不到 x 与 y 的关系式。当然了可以求出几个点,强行带入二次曲线通式求解。不过想了想还是用解析几何的方法去做吧: $$ \frac{1}{2}gsin\theta{}t^2=\sqrt{x^2+y^2}, sin\theta=\frac{y}{\sqrt{x^2+y^2}} $$ 这么一代入,显然是圆。但既然这是物理题,可不可以用物理方法做呢? 可以,这就是等时圆。 啥叫等时圆? 等时圆就是,在一个光滑圆环上选择任意一点,让一个小球从这个点沿着光滑直杆到圆的最低点,无论这个点在哪里(最低点不算哈),时间都是一样的。怎么证明? 很简单:设小球与最低点连线与数值方向上夹角为$$\theta$$,那么 $$ s=2Rcos\theta, \frac{1}{2}gcos\theta{}t^2=s $$ 你会发现 t 与$$\theta$$无关。证明完毕。 其实也可以倒过来:从圆的最高点往各个方向下滑,到达圆周时间相等。 好了,到此为止内容都没什么,但你会想问这和前面那道题目有什么关系呢?这怎么等时圆?重力往下诶。运动可是往右上方。 Here comes the black magic :) 我们考虑向下滑到最低点的那个等时圆,在这个圆周上滑倒最低点的时间都相等。好,我们把这个图沿着竖直方向旋转 180 度形成一个球,想想这个球上每一个点到最低点时间是不是也一样?那么考虑逆过程,让小球从斜面上滑下来,我对刚才的球体再竖着切一刀,得到的平面不就是题目中那个吗?得证。 当然了最好能有动画说明,限于本人时间问题暂时不提供 ^_^

Read More

I have found a good way to track changes in .gz files: Add these to ~/.gitconfig: [core] attributesFile = ~/.gitattributes [diff "zip"] textconv = unzip -p binary = true [diff "gz"] textconv = gzcat binary = true [diff "bz2"] textconv = bzcat binary = true [diff "xz"] textconv = xzcat binary = true [diff "tar"] textconv = tar -O -xf binary = true [diff "tar-bz2"] textconv = tar -O -xjf binary = true [diff "tar-gz"] textconv = tar -O -xzf binary = true [diff "tar-xz"] textconv = tar -O -xJf binary = true [diff "odf"] textconv = odt2txt [diff "pdf"] textconv = pdfinfo [diff "bin"] textconv = hexdump -v -C And these to ~/.

Read More

Finally the end of Senior 2 arrives. I’m on the way to Senior 3. The summer vacation is rather short which is really common in China. These days I have been diving into Emacs by subscribing both emacs and emacs-devel mailing list. It contributes to my English as well. I can learn a lot of new words and expression thanks to the nice and convenient feature of looking up a word in iOS.

Read More

Just got a piece of great news: GHC 8.0.1 is out! See the announcement [here][http://article.gmane.org/gmane.comp.lang.haskell.ghc.devel/11928]. So excited! And Emacs 25 release will be out soon. Using Emacs 25.0.94 now. Many new features available. See [this][http://puntoblogspot.blogspot.com/2016/05/emacs-251-news.html] for more information. Recently I have finally started to use mu4e and gnus. What makes it truly great is that they integrate org, bbdb and so on.

Read More