gpt4 book ai didi

c - 使用 scanf 解析字符串时的奇怪行为

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

我在执行 sscanf 时遇到了相当奇怪的行为。目前正在使用 c 语言在 Windows 7 机器上工作。

我有以下内容:

if( sscanf( str, "%1[a-zA-Z]%31[a-zA-Z+.-]%n", &scheme[ 0 ], &scheme[ 1 ], &num_chars ) >= 1 )
{
return( num_chars );
}

str 变量是一个大输入字符串,可能大于 32 个字符。scheme 变量被声明为包装函数调用的参数,它是一个 32 个字符的数组。

我可以使用几个 scanfs 或两个单独的变量轻松地做到这一点。我很好奇为什么这不能按原样工作。

编辑:
在我执行此操作时发生错误 str 包含“tel-net”(正在测试“-”),这导致方案字符串基本上没有可用字符。

解决方案:
我弄清楚问题出在哪里,实际上根本不是 scanf 问题。

这就是我声明方案变量的方式:

IOP_uri_scheme_type   * scheme_str;

IOP_uri_scheme_type 声明如下:

typedef char    IOP_uri_scheme_type[ IOP_URI_MAX_SCHEME_SZ ];  // Size = 32

问题是索引,scheme[1] 实际上是跳转整个 block (所有 32 个字节)而不是像我期望的那样跳转一个字符。所以从技术上讲,scanf 的开头是正确的(减去 %n 东西)。

我可以解决这个问题的一种可能方法是首先将 scheme 转换为 (char *) 或直接操纵指针值,取消引用它,或者不使用我不需要的指针。

感谢大家的帮助。

最佳答案

看来您正在尝试在 sscanf 中使用正则表达式。据我所知,sscanf 不支持正则表达式。

关于c - 使用 scanf 解析字符串时的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23666424/

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