gpt4 book ai didi

c - scanf ("...%n",...) 匹配失败

转载 作者:太空宇宙 更新时间:2023-11-04 04:55:53 25 4
gpt4 key购买 nike

我想计算 CSV 文件中的“列”,给定其元素的字符串模式,例如

   1,2,3,4 

对于模式“%d”,应该返回 4。

我写了一个这样的分词器

offset = 0;
strcpy(var_pattern, pattern) // e.g. pattern = "%d,"
strcat(var_pattern, "%n")
while (sscanf(&line[offset], LINE_SIZE, buf,var_pattern,&bytes_consumed > 0) {
count++; // column counter
offset += bytes_consumed
};

我遇到的问题是示例中 CSV 文件行中最后一个元素缺少分隔符“,”。在 linux64/gcc 上做

    c = sscanf("12","%d,%n",&a,&b)

给出 c= 1(匹配的模式数)、a=12 和 b=32767(消耗的字节数)。这个(愚蠢的)行为标准/平台特定吗?还是错误?

我知道 strtok 或正则表达式打包,但我更喜欢使用标准方法,使用 strtok 的想法让我内心的软件工程师呕吐。

TIA

最佳答案

你的解决方案很难,更简单的是:

char *s="1,2,3,4";
int n,i;
while( 1==sscanf(s,"%d%n",&i,&n) && (s+=n,*s==','?++s:!*s) )
printf("%d\n",i);

关于c - scanf ("...%n",...) 匹配失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8105943/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com