【问题标题】:Is there a built in function to get the back half of a strsep()?是否有内置函数来获取 strsep() 的后半部分?
【发布时间】:2020-09-21 14:40:01
【问题描述】:

简而言之,目前以下代码输出:The substring is AES。不幸的是,我希望得到结果The substring is 100。这是因为strsep() 仅保留拆分的第一部分,而不保留第二部分。有没有办法让第二部分成为保留的部分?

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

int main () {
   const char haystack[50] = "SHA1 = 99\nAES = 100";
   const char needle[10] = "Point";
   char *ret;
   char *bonus;
   ret = strstr(haystack, "AES");

   bonus = strsep(&ret, "=");

   printf("The substring is: %s\n", bonus);

   return(0);
}

【问题讨论】:

  • 打印 ret 而不是 bonus: printf("The substring is: %s\n", ret);
  • 成功了!我不知道。
  • 文档非常清楚它是如何工作的:man7.org/linux/man-pages/man3/strsep.3.html
  • 这是为了方便编写循环来处理由分隔符分隔的多个字段。 while ((f = strsep(&amp;ret, ",")) != NULL) process_field(f);

标签: c substring strsep


【解决方案1】:

来自strsep function's documentation

char *strsep(char **stringp, const char *delim);

如果*stringp 为NULL,则strsep() 函数返回NULL 并执行 没有其他的。否则,此函数在 字符串*stringp,由字符串中的一个字节分隔 delim。通过用 a 覆盖分隔符来终止此标记 空字节 ('\0'),*stringp 被更新为指向过去的令牌。 如果没有找到分隔符,则将令牌视为整个 字符串*stringp,而*stringp 变成NULL

所以在你的程序中你应该打印ret而不是bonus

bonus = strsep(&ret, "=");

printf("The substring is: %s\n", ret);

因为ret 将指向令牌"="

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-08
    • 1970-01-01
    • 2012-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多