这段代码为啥会运行爆了啊

我看你有戏 2008-11-08 10:03:38

#include "stdio.h"
#include <stdlib.h>
#include "windows.h"

void GetRndFileName(char *pszFileName,char *pHouZui)
{
__int64 a,ans=0;
for(int k=0; k<4; k++)
{
a = rand();
a<<=15*k;
ans=ans|a;
}
sprintf(pszFileName,"%d.%s",ans,pHouZui);
}

void main()
{
char szFileName[50] = {0};
char *pHouZui = "exe";
GetRndFileName(szFileName,pHouZui);
printf(szFileName);
}
...全文
59 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
我看你有戏 2008-11-08
  • 打赏
  • 举报
回复

#include "stdio.h"
#include <stdlib.h>
#include "windows.h"

void GetRndFileName(char *pszFileName,const char *pHouZui)
{
__int64 a,ans=0;
for(int k=0; k<4; k++)
{
a = rand();
a<<=15*k;
ans=ans|a;
}
//char *p = "exe";
int n = (int)ans;
sprintf(pszFileName,"%d.%s",n,pHouZui);
}

void main()
{
char szFileName[50] = {0};
char *p = "exe";
while (true)
{
GetRndFileName(szFileName,p);
printf("%s\n",szFileName);
Sleep(1000);
}

}

//自己调试通过了,谢谢各位,结贴
我看你有戏 2008-11-08
  • 打赏
  • 举报
回复
谁帮忙调试一下啊

VC6.0调试通过的代码

给满分....
  • 打赏
  • 举报
回复
你的ans这个变量最后的值太大了,%d的长度没有那么大,所以会报错

你可以这样调试一下,赋值ans为一个小一些的数,比如说6666,就可以显示了

这样就可以印证我的说法了。



另外,你的那个pHouZui用的也不对,不会显示出后缀的。

我看你有戏 2008-11-08
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 xhs_lh04 的回复:]
sprintf(pszFileName,"%d.%s",ans,pHouZui);
这里不能用%d吧?,因为你的ans是64位也就是8字节,%d会按4字节整型规则去取数

C99标准里是用:
sprintf(pszFileName,"%lld.%s",ans,pHouZui);
[/Quote]

2楼的还是报错

char szFileName[1024] = {0};
我都改成这样了还是报错
我看你有戏 2008-11-08
  • 打赏
  • 举报
回复
空间足够大的吧
sprintf(pszFileName,"%d",ans);
这样就没问题
xhs_lh04 2008-11-08
  • 打赏
  • 举报
回复
sprintf(pszFileName,"%d.%s",ans,pHouZui);
这里不能用%d吧?,因为你的ans是64位也就是8字节,%d会按4字节整型规则去取数

C99标准里是用:
sprintf(pszFileName,"%lld.%s",ans,pHouZui);
bargio_susie 2008-11-08
  • 打赏
  • 举报
回复
能不能在sprintf(pszFileName,"%d.%s",ans,pHouZui);上面加打印语句把ans打印出来看下占了多少位啊。

看下是不是你szFileName[50]分配的空间还不够

69,372

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧