关于strtok函数的问题求大神解答

baidu_31357663 2017-08-01 04:27:51
我现在分割一个
"user1:user1abcd;user2:user2abcd;user3:user3abcd;user4:user4abcd"这样的字符串,

我的代码如下:
ret1 = strtok(ret,":");
strcpy(name,ret1);
printf("name=%s\n",name);

while(ret1 != NULL)
{
if(ret1 != NULL)
{
ret1 = strtok(NULL,";");
strcpy(password,ret1);
printf("password=%s\n",password);
}
else
{
break;
}
if(ret1 != NULL)
{
ret1 = strtok(NULL,":");
strcpy(name,ret1);
printf("name=%s\n",name);
}
else
{
break;
}
}

执行完会出现这样的问题

name=user9
password=user9abcd
name=user10
password=user10abcd
name=user11
password=user11abcd
name=user12
password=user12abcd

Segmentation fault (core dumped)
最后出现一个分割错误该怎么解决?

...全文
188 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2017-08-01
  • 打赏
  • 举报
回复
作为一个C程序员,对 scanf,sscanf,fscanf printf,sprintf,fprintf 这类函数的用法,还是要做到“拳不离手,曲不离口”的。
#include <stdio.h>
char s[]="user1:user1abcd;user2:user2abcd;user3:user3abcd;user4:user4abcd";
char *p;
int n,r;
char name[64];
char password[64];
int main() {
    p=s;
    while (1) {
        r=sscanf(p,"%63[^:]:%63[^;];%n",name,password,&n);
        if (r==2) {
            printf("name:[%s] password:[%s]\n",name,password);
            p+=n;
        } else if (r==EOF) {
            break;
        }
    }
    return 0;
}
//name:[user1] password:[user1abcd]
//name:[user2] password:[user2abcd]
//name:[user3] password:[user3abcd]
//name:[user4] password:[user4abcd]
//

3,882

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 其它技术问题
社区管理员
  • 其它技术问题社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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