字符串切割的问题

xuehan1983 2009-09-17 07:05:02
使用strtok函数作字符串切割时候遇到了一个问题:
我的字符串是10203040=1020,代码如下:



char ln[30];
char *p;
char Df2007[8],Df97[4];;
ln="10203040=1020";
int j;
char *d="=";
p=strtok(ln,d);
j=0;
while(p!=NULL)
{
if(j==0){
strcpy(Df97,p);
}
else strcpy(Df2007,p);
p = strtok(NULL,d);
j++;
}

为什么结果里面df97的值是错误的,而只有把df创建为df[10]或者10以上的长度才能正确的读出来,难道是df[4]的长度不够吗?请问老鸟们这个问题该怎么解决啊?
...全文
46 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
wangshiyang 2009-09-17
  • 打赏
  • 举报
回复
p=strtok();截取的是=前面的!
=前面有八位,你定义个4位的当然不行了!
wanjingwei 2009-09-17
  • 打赏
  • 举报
回复
#include "iostream"
#include <vector>
#include <string>
using namespace std;
int main()
{
char ln[30]="10203040=1020";
char *p;
char Df2007[8],Df97[9];//改大点

int j;
char *d="=";
p=strtok(ln,d);

j=0;
while(p!=NULL)
{
if(j==0){

strcpy(Df97,p);//p是10203040
}
else strcpy(Df2007,p);
p = strtok(NULL,d);
j++;
}
}
starcat 2009-09-17
  • 打赏
  • 举报
回复
55, 看着那么多分,拿不到

还是继续闭关修炼去……
liao05050075 2009-09-17
  • 打赏
  • 举报
回复

第一次strok后,p是指向10203040的,此时j==0,你要把它拷贝到Df97[4]中去,空间哪里够啊?
然后再strtok,p指向1020,于是Df2007为"1020".

还有,字符串最后还有一个'\0'做为结束符号,所以,保存4个字符需要5个元素的数组,8个字符需要9个
hoomey 2009-09-17
  • 打赏
  • 举报
回复
数组越界了
要定义大一点
mstlq 2009-09-17
  • 打赏
  • 举报
回复
"1020"其实是'1','0','2','0','\0' size是5

建议
char Df2007[9],Df97[5];;

69,370

社区成员

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

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