由一个#符号引发的一系列问题

本文记录了作者在使用VS2008进行B/S模式开发过程中遇到的问题及解决过程,包括因文件命名不当导致的设计视图显示错误,以及安装SQL Server Express Manager时遇到的困难。

由一个#符号引发的一系列问题

       一个“#”符号,很不起眼。然而却导致了很多变化。往往就是这些细节,在不经意之间让你无可奈何,头疼不绝。

       从一遍一遍的安装vs2008,然后又重装操作系统,然后又更换操作系统。这一系列的过程,可真是让人欲崩溃……

这个事还得从开始学习B/S模式的开发说起。

       从老师那拷过来视频就开始B/S的学习之中,看一部分视频之后便抄起了vs2008开始做,首先是先建立了一个文件夹,因为是开始学习C#了,于是便命名为“C#工程”。建好位置之后便开始行动。

从一开始做到页面那一块做的都挺带劲,因为关于后台的操作和原先做的C/S模式没有区别,就是前台的页面没有接触过。在以很快的速度完成后台的编写之后就开始前台的编码工作。不过等页面编写了一半之后问题出来了。刚开始并没有问题,因为一直直接写的源码(页面源码),可以运行,也有效果。不过等到后来需要用到设计视图了就傻了。一看屏幕上都是叉叉什么该控件无法找到路径之类的错误。于是上网查,不少人都建议运行一个什么命令就好了。结果试了一下还是不行。找了半天依然没有找到解决方案,(看来我的错误是一个绝版的!)。

       于是乎想到可能是vs2008的错误,重装吧。(谁知道当时我是咋想滴呢!)于是重装了一遍,还是不行,然后又找了一个英文版的(据说英文版的比中文版的稳定),安装上,依然不行。

       没办法,重装系统是不是会好些。于是重装,装了一边依然如故。我很纳闷,也很生气。然后到微软网站上看,无意中看见了一些补丁,看了看上面的补丁好像都不适用于xp了。我一想,嗯,是不是咱也该升级了。于是找了个win7的镜像文件。硬盘安装。

       个把小时之后,华丽的界面扑面而来。于是一系列动作如行云流水一般:下载安全软件,打补丁,安装vs2008。不过问题依然如故!(依然如故最可怕了)。后来仔细琢磨了一下,心想,系统重装的没问题,IDE也没问题,那么问题在哪呢?

       忽然之间,一拍大腿(胖子的)。是不是因为文件名呀!于是把源码拷出来,放到别的文件夹下,打开。最不愿意看到的一幕出现了。(你觉得是哪一幕?)

       可以用了,太打击人了。不是说我不希望可以用,但是这个错误和代价的比例已经高达了1100.你可以想象多打击人。(从这点可以认识到一个问题,在进行排错的时候要先从小地方入手,否则,如我所遇)依然没有结束。(战线拉得很长了)

       用过sql2005的“童鞋”都知道,他需要一个sql express manager来进行数据库的管理,要不然不能进行sa用户的登录。因此必须安装sql express manager,安装吧。又是一个事故。

       安装失败!竟然安装失败,很无语。这么先进的系统竟然¥%&……微软你#¥……#&

       没办法,win7界面太华丽的,也因为不愿再次重装系统了。于是找解决方案吧。开始分析

首先分析错误提示,说是“安装包错误”。那么先找个安装包吧。于是下载了一个,再次安装,以失败告终。

再次分析,是不是数据库的文件有问题,因为微软的注册表实在是可怕。从网上查查吧。依然无果。

然后又想,是不是系统补丁的事,因为以前遇到过补丁冲突的事。于是跑到微软官网上,数据库部分,一看,果然如此。说是win7下需要安装sql2005 sp3.这就行了,有了解决方案就行。下载安装,成功。Oh yeah!安装express manager,啊,失败!

再次让自己冷静,分析,忽然想到以前看微软官网上的一下软件时有说该软件支持visitwin7.于是联想到了我们有一个女同学在visit系统上安装时也是安装不上那个express manager。不过后来好像安装成功了。于是抱着试一试的态度,从同学那要了一个安装包,双击,打开,看着滚动条不断地滚啊滚啊,一直到最后也没有出错提示。(这个安装包是英文版的)

心里猛叹一口气,可算是行了。

到此,问题才算是结束了。

如果你细心地看到这了,你应该了解了我这一系列问题的来源。其实就是因为刚开始的时候进行的排错方法不合适,才导致如此后果。再细想一下再进行软件调试时,遇到错误该如何对待,是直接推翻了重做,还是从小到大一步一步推断?

或许你已经是一个经验丰富的老编码者了,那么你更要注意,因为往往以自己的经验来说不会考虑到细小的地方,因为已经太熟练了。但是往往是细节造就了大错误。

由此可以总结到:不管是在生活中还是在软件开发中,如果遇到错误,不要仅凭经验就直接忽略小的地方,不然我就是先例。

 

 

 

Ps:其实在安装sql express manager失败后还试了一下在win7下安装虚拟机专门用来提供数据库的服务。不过微软的那一款虚拟机不知道如何让它与主机进行局域网通信。最后又卸载了。

将无符号整数赋值给有符号整数时,可能会引发一系列潜在问题,尤其是在不同数据类型之间进行赋值或比较时,这些问题可能会影响程序的正确性和安全性。 ###符号与无符号整数的隐式转换 当无符号整数被赋值给有符号整数时,编译器会尝试进行隐式类型转换。如果无符号整数的值大于有符号整数类型所能表示的最大值,则会导致溢出,从而产生未定义行为。例如,在 32 位系统中,`int` 类型通常为 32 位有符号整数,其取值范围为 -2147483648 到 2147483647,而 `unsigned int` 的取值范围为 0 到 4294967295。如果将一个大于 2147483647 的 `unsigned int` 值赋给 `int` 类型变量,结果将是负数,这可能与预期不符。 ```c unsigned int a = 4294967295; int b = a; // 此时 b 的值为 -1,这可能不是预期结果 ``` 这种转换行为可能导致程序逻辑错误,尤其是在条件判断或循环控制中[^5]。 ###符号与无符号整数的比较问题 在表达式中混合使用有符号和无符号整数时,C/C++ 编译器会自动进行类型转换,这可能导致比较结果与预期不符。例如,以下代码中的条件判断: ```c unsigned int a = 10; int b = -5; if (a > b) { // 该分支不会执行,因为 b 会被转换为无符号整数,其值将非常大 } ``` 在此例中,`b` 是有符号整数,其值为 -5,但在比较时会被转换为无符号整数,其值将变为一个非常大的正数(如在 32 位平台上为 4294967291),因此 `a > b` 的结果为 `false`,这与直观判断相悖[^5]。 ### 安全性问题与整数溢出 在某些情况下,将无符号整数赋值给有符号整数可能导致整数溢出,这不仅会影响程序逻辑,还可能被攻击者利用来执行恶意代码。例如,当使用无符号整数表示缓冲区大小或索引,并将其赋值给有符号整数变量时,若该值超过有符号整数的最大表示范围,将导致负数被当作缓冲区大小或索引使用,从而引发缓冲区溢出或其他安全漏洞。 为了防止这些问题,建议避免在赋值或比较中混合使用有符号和无符号整数类型,并启用编译器的最高警告级别,以便及时发现潜在的类型不匹配问题[^5]。 ### 类型转换规则与操作数rank 在进行类型转换时,C语言规定了char、short、int、long、long long的转换级别一个一个高,相同类型的unsigned和signed具有相同rank。当一边是无符号,一边是有符号,且无符号的rank不低于有符号的rank时,有符号类型会被转换为无符号类型。如果无符号的rank低于有符号的rank,并且有符号类型可以覆盖无符号数的取值,则无符号类型会被转换为有符号类型;否则,两边都会转换为有符号类型对应的无符号类型[^1]。 这些规则在实际应用中可能会导致意想不到的结果,尤其是在处理边界值或大整数时。 ### 总结 将无符号整数赋值给有符号整数可能会导致溢出、未定义行为以及逻辑错误,尤其是在混合类型比较或赋值时。为了避免这些问题,应尽量避免在表达式中混合使用有符号和无符号整数,并启用编译器的严格检查选项,以确保程序的健壮性和安全性。
评论 22
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值