scanf函数分隔符和空字符串 [英] Scanf delimiter and empty string

查看:131
本文介绍了scanf函数分隔符和空字符串的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个问题,使用带分隔符的sscanf()的值来读取。

I'm having a problem reading in values using sscanf() with delimiters.

sscanf(line, "%15[^:]:%20[^:]:%d:%d:%50[^:]:%25[^:]:%25[^\n]",
       string1, string2, &value1, &value2, string3, string4, string5);

有只有当行是像一个问题:

There's only a problem when line is something like:

abc:defg:1:2::hijk:no

当我打印出来的字符串/值,一切都很正常,直到字符串3。它输出一些奇怪的字符,然后'串,输出的空白处,并STRING5输出一个类似的怪异字符。

When I print out the strings/values, everything is normal up until 'string 3'. It outputs some weird character, then 'string4' outputs an empty space and string5 outputs a similar weird character.

任何人有任何想法,我怎么能在正确的价值观扫描?

Anybody have any idea how I can scan in the right values?

编辑:我的意思是ABC:DEFG:1:2 :: HIJK:不,不是ABC:DEFG:1:2 :: HIJK:LM:没有​​

edit: I meant abc:defg:1:2::hijk:no, not abc:defg:1:2::hijk:lm:no

推荐答案

使用 strsep 像下面

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char *strsep(char **sp, const char *sep);

int main(){
    char line[] = "abc:defg:1:2::hijk:no\n";
    int value1, value2;
    char string1[16];
    char string2[20];
    char string3[51];
    char string4[26];
    char string5[26];
    char *p = line;
/*
    sscanf(line, "%15[^:]:%20[^:]:%d:%d:%50[^:]:%25[^:]:%25[^\n]",
        string1, string2, &value1, &value2, string3, string4, string5);
*/
    strcpy(string1, strsep(&p, ":"));//or strncpy, etc. 
    strcpy(string2, strsep(&p, ":"));
    value1 = atoi(strsep(&p, ":"));
    value2 = atoi(strsep(&p, ":"));
    strcpy(string3, strsep(&p, ":"));
    strcpy(string4, strsep(&p, ":"));
    strcpy(string5, strsep(&p, ":\n"));
    printf("%s %s %d %d \"%s\" %s %s\n",
        string1, string2, value1, value2, string3, string4, string5);
    return 0;
}

请参阅 strsep 以下链接。结果
strsep

strsep 不是一个标准功能。结果
如果不存在的话,可以实现如下(例如):

strsep is not a standard function.
if it does not exist, be implemented as follows(E.g) :

char *strsep(char **sp, const char *sep){
    char *p, *s;
    if (sp == NULL || *sp == NULL || **sp == '\0') return(NULL);
    s = *sp;
    p = s + strcspn(s, sep);
    if (*p != '\0') *p++ = '\0';
    *sp = p;
    return(s);
}

这篇关于scanf函数分隔符和空字符串的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆