首页
社区
课程
招聘
取字符串前数字(函数问题)在线等[求助]
发表于: 2007-3-13 14:04 3909

取字符串前数字(函数问题)在线等[求助]

2007-3-13 14:04
3909
以下这个函数只要输入3个位的数字就出错,超过不会太少也不会。我不知道内存那里益出了。
int ZiFuShuZi(char *zf)
{
int i=0,s;
int k=strlen(zf);
char *aa={0};
aa=new char[k];
while(i<k){
if(isdigit(zf[i])==0)
{break;}
aa[i]=zf[i];
i++;
}
s=atoi(aa);
return s;
}

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 161
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
PFC
2
int ZiFuShuZi(char *zf)
{
int i=0,s;
int k=strlen(zf);
char aa[8]={0};
while(i<k){
if(isdigit(zf[i])==0)
{break;}
aa[i]=zf[i];
i++;
}
s=atof(aa);
return s;
}
2007-3-13 14:47
0
雪    币: 235
活跃值: (100)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
3
是不是要取类似于

12345abcd

这样字符串前面的数字?

如果这样,一个atoi函数就搞定了啊
2007-3-13 17:50
0
雪    币: 101
活跃值: (12)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
4
2:貌似字符串长度超过7个字节还是要崩.

1: 代码最少有下面4个问题
(1)
char *aa={0};
你的本意是要把aa指针的内存初始化为全0,
但是aa是一个指针, 并且初始化列表又只有一个元素0,
所以其实就是 char * aa = NULL; 为你下面埋下了隐患。
(2)
int k=strlen(zf);
aa=new char[k];
明显分配的内存应该是字符串能占的内存, 以0结尾的字符串
占用的空间为strlen(zf)+1, 所以你必须也多分配一个单元
aa = new char[k+1]; 还一个问题是new没有判断返回值
(3)
s=atoi(aa);
还是用0结尾, 你保证了aa拷贝后最后一个字符是0结尾吗?
在new后没有memset, 最后一次拷贝后也没有
aa[i] = '\0'; 你需要在s=atoi(aa)前加下aa[i] = '\0';
(4)
动态内存没释放.

另外如楼上所说. atoi 本来就是你这么做的..
2007-3-14 15:37
0
游客
登录 | 注册 方可回帖
返回
//