注册 登录
编程论坛 C++教室

我又来求助了,这次是编译问题,同样的代码放在不同的编译器里面,运行结果不一样。

纯黑色 发布于 2013-08-09 10:10, 852 次点击
代码已经放在附件里面了。
可以编译成功,但是:
放在c-free3.5里面编译后运行结果跟期望值一样。
但是放在 vs2008中编译运行结果却是乱码。
我昨天晚上做了很久的实验,做不出结果来。求大神看看,这次我实在是找不出原因了。
只有本站会员才能查看附件,请 登录
6 回复
#2
peach54602013-08-09 11:17
没看代码
先开个题...

不同编译器结果不一样...这是小概率的事情
但是是有可能的...
而且没有孰对孰错...

PS:另外,我可以吐槽c-free吗?
我从来就没有看懂过C-FREE的编译信息过...
在我的第一感官印象里这个编译器很烂...
#3
lintaoyn2013-08-09 14:44
程序代码:
void AES::KeyExpansion(unsigned char* key, unsigned char w[][4][4])
{
  int i,j,r,c;
  unsigned char rc[] = {0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36};
  for(r=0; r<4; r++)
  {
    for(c=0; c<4; c++)
    {
      w[0][r][c] = key[r+c*4]; // 3 + 3*4 key的长度至少要有16个字符, 这里越界了。
    }
  }

unsigned char key[] = "superpol"; // superpol 加长。
你的测试代码 key的长度太短了,越界读取数据了。把 key 的长度加长到16个字符以上就可以了。
#4
纯黑色2013-08-09 16:33
回复 2 楼
C-FREE给的提示确实看不懂  囧。
能推荐个轻量级的编译器么?
我觉得VS太臃肿了,不适合学新东西的时候用。
#5
peach54602013-08-09 19:45
我用得codeblock,之前用的codelite
据说dev-c++还行

C-free我真心看不懂他的编译提示,编译错误提示跟真正的错误差十万八千里
#6
纯黑色2013-08-09 22:37
回复 3楼 lintaoyn
不行啊,我把key的字符串设到了24,依然不行。
#7
纯黑色2013-08-11 13:50
回复 3楼 lintaoyn
忘记说了,我的locle是英文(美国)
1