【实习记】2014-08-14新版本的apache已默认不支持cgi+C语言中的scanf未解之迷

总结1:
ubuntu14.04上的apache2.4.7默认没有cgi模块,而ubuntu10.04是的apache2.2.14默认是有的。

起因:每次都用ubuntu14.04上的VBox里运行的ubuntu10.04上的apache2,感觉略麻烦,于是直接在ubuntu14.04上装个apache2。

发现/cgi-bin/里的cgi总是404,反复确认配置目录没错。

怀疑权限问题(但一般会是5XX而不是404),最后无果。

搜索多次,资料不多,最后找到线索和答案,就是默认不支持了,对于开源软件版本差异巨大问题已见惯不怪,诶,官网没有特别说明。

解决方法:《编译支持cgi的apache》http://www.icycandy.com/blog/compile-cgi-support-for-apache
引用:“在configure时加一个选项–enable-cgi来打开apache的cgi支持”

我打算先用着ubuntu10.04。

晚上以为顺利:谁知又有阻碍。

总结2:
C语言中的scanf未解之迷:最后一个赋值的变量无缘无故多了个分割符。

#include <stdio.h>

int main(int argc, char* argv[]){
    /*  输出如下其中a,1,b,c是输入
     *  login,1,rich,rich,
     *  login;1;rich;rich;
     *  login#1#rich#rich#
     *  a,1,b,c
     *  login,1,rich#rich,
     */
    int type=0;
    char name[32]="\0", password[32]="\0";

    sscanf("login,1,rich,rich", "login,%d,%s,%s", &type, name, password);
    printf("login,%d,%s,%s\n", type, name, password);
    /* login,1,rich,rich, */

    sscanf( "login;1;rich;rich", "login;%d;%s;%s", &type, name, password);
    printf("login;%d;%s;%s\n", type, name, password);
    /* login;1;rich;rich; */

    sscanf( "login#1#rich#rich", "login#%d#%s#%s", &type, name, password);
    printf("login#%d#%s#%s\n", type, name, password);
    /* login#1#rich#rich# */

    scanf("login,%d,%s,%s", &type, name, password);
    printf("login,%d,%s,%s\n", type, name, password);
    /* 末尾总是多一个分割符 */
    return 0;
}

许久后才想明白,%s会读取字符,只认空格,制表符做分割;于是%s#%s中的第一个%s把rich#rich读完了!

可是输出的最后一行也是很恐怖的错误!

【实习记】2014-08-14新版本的apache已默认不支持cgi+C语言中的scanf未解之迷,布布扣,bubuko.com

时间: 2024-12-29 01:46:59

【实习记】2014-08-14新版本的apache已默认不支持cgi+C语言中的scanf未解之迷的相关文章

2014/08/14 – Backbonejs

[来自: Backbone.js 开发秘笈 第8章] 相关技术: 1. 使用 Require.js 组织项目结构 文件结构: index.html lib/ underscore.js jquery.js backbone.js js/ app.js userDefine.js index.html: <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <titl

寻找大学目标及行动步骤——记ITAEM团队第二期宣讲会(2014.05.14)

·昨晚8:00-9:40,在 钟海楼03029 ,进行了ITAEM团队第二期宣讲会(第一期见第一期宣讲会总结),来参加的主要是大一学生,以信院为主,也有法学院.文学院的同学.在宣讲会中,大家都比较积极认真. 第二期宣讲会议程 (1)ITAEM团队骆宏作"有目标,才有奋斗的动力"主题分享,时间约为晚8点-8点40分: (2)丁又专作"Doing,Now(现在就行动)"演讲,时间约为晚8点45分-9点28分: (3)ITAEM团队温辉翔分享自己技术成长经验与推荐书籍,时

记2014英特尔杯嵌入式邀请赛

2014年Intel杯大学生电子设计竞赛嵌入式邀请赛已经圆满结束了,我很高兴能够捧得最高奖Intel杯.自从捧杯的这几天来,各路媒体的采访,学校的祝贺,同学好友的祝贺应接不暇,对此我也表示非常感谢.作为一名大学生,我很明白这个“光环”所带来的也就是这几天的关注而已,而最终也将被请下神坛,继续做我的一位平凡大学生.收获也不能说没有,但收获并不是别人给的,是需要自己去寻找,自己去总结的. 回想六个月的项目经历,可以说是曲折坎坷,又有点神奇美妙,仿佛上帝安排.项目的第一阶段是构思创意,真正的想创意时间

2015-08-25 php大力力016 兄弟连高洛峰php教程(2014年 14章数据库章节列表)

2015-08-25 php大力力016 兄弟连高洛峰php教程(2014年 14章数据库章节列表) [2014]兄弟连高洛峰 PHP教程14.1.1 复习数据库  15:58 [2014]兄弟连高洛峰 PHP教程14.1.2 phpMyAdmin的使用 15:59 [2014]兄弟连高洛峰 PHP教程14.1.3 php访问MySQL 17:27 [2014]兄弟连高洛峰 PHP教程14.1.4 在PHP脚本中操作MySQL数据库1  17:38 [2014]兄弟连高洛峰 PHP教程14.1.

Bootstrap 3.2.0 源码试读 2014/08/09

第一部分 normalize.css 104至110行 code,    /* 编辑代码 */ kbd,    /* 键盘输入的文本 */ pre, samp {    /* 范例,sample的简写 */   font-family: monospace, monospace;    /* 这个地方应该是写错了,第二字体应该是serif */   font-size: 1em; } 设置字体的大小为1em,字体为monospace. 111至119行 button, input, optgro

在MyEclipse配置自己安装的Tomcat(2014.08.18)

今天因为要在tomcat下运行一个java项目,第一次嘛,遇到了不少问题,总结分享一下: 第一次,我直接将 MyEclipse 生成的项目放到 tomcat 安装目录的 webapps 目录下,运行出现404,无法访问. 然后想了想,发现这是个错误的做法.应该先通过 MyEclipse 将项目部署到 Tomcat 下: 然后, MyEclipse 自带了 tomcat,我要配置自己安装的 TomCat : (请看参考资料:http://jingyan.baidu.com/article/4853

X100S Collection Before 2014/08/01

风暴前的东京湾 // Tokyo Bay before Storm 上野公园 // Ueno Park X100S Collection Before 2014/08/01,布布扣,bubuko.com

2014/08/05 – Backbonejs

[来自: Backbone.js 开发秘笈 第2章] Model API: (function ($) { //define Model Class ------------------- var ModelClass = Backbone.Model.extend({ defaults: {},//Backbone 支持在模型初始化时动态进行定义 [支持多行表达式设置默认值,即值为函数] initialize: function () { //模型对象被创建后即被调用 /* 注:如定义了默认属

2014/08/04 – Backbonejs

[来自: Backbone.js 开发秘笈 第1章] 各种模型实际上是通过扩展其基类 Backbone.Model 实现的.同理,定义的集合是靠扩展其基类 Backbone.Collection 而实现的. 控制器的功能被分散实现在 Backbone.Router 和 Backbone.View 当中. 路由器负责处理 URL 的变化,并且委派一个视图来继续处理应用.路由器(异步)获取模型后,随即触发一个视图的更新操作. 视图负责监听 DOM 事件.它要么对模型进行更新,要么通过路由器转移到应用