遇到换行符时对字符串进行标记-不起作用的换行符无法识别

遇到换行符时,我正在尝试标记字符串。

rest = strdup(value);
while ((token = strtok_r(rest,"\n",&rest))) {
       snprintf(new_value,MAX_BANNER_LEN + 1,"%s\n",token);
}

其中'value'是一个字符串,说:“这是一个示例\ n这里是换行符”

但是上面的函数没有标记'value'并且'new_value'变量按原样出现,即“这是一个示例\ n这里是换行符”。

有什么建议可以克服吗?

谢谢, Poornima

lijipeng123 回答:遇到换行符时对字符串进行标记-不起作用的换行符无法识别

代码中发生了几件事:

  • strtokstrtok_r将字符串标记化为第一个参数。同一字符串的后续标记化应传递NULL。 (可以使用不同的定界符对同一字符串进行标记化。)
  • 第二个参数是一串可能的分隔符。在您的情况下,您应该通过"\n"。 ({strtok_r会将字符的延伸视为单个中断。这意味着标记化"a\n\n\nb"将产生两个标记。)
  • strtok_r的第三个参数是函数的内部参数。它会标记下一个标记化应该在哪里开始,但是您不必使用它。只需定义一个char *并传递其地址即可。
  • 尤其不要将源字符串变量重新用作状态。在您的示例中,您将丢失strdup字符串的句柄,因此以后就无法按需释放它。
  • 不清楚您如何确定令牌化“无效”。您重复将令牌打印到相同的char缓冲区。您是否只保留最后一个换行符之后的部分?在这种情况下,请使用strchrr(str,'\n')。如果结果不是NULL,那是您的“尾巴”。如果是NULL,则整个字符串就是您的尾巴。

以下是标记字符串的工作方式:

char *rest = strdup(str);
char *state;
char *token = strtok_r(rest,"\n",&state);

while (token) {
    printf("'%s'\n",token);

    token = strtok_r(NULL,&state);
}

free(rest);
本文链接:https://www.f2er.com/3048998.html

大家都在问