c - 遇到换行符时标记字符串 - 不工作换行符无法被识别

标签 c newline

我试图在遇到换行符时标记字符串。

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这里是换行符”。

有什么建议可以克服这个问题吗?

谢谢, 普尔尼玛

最佳答案

您的代码中发生的一些事情:

  • strtokstrtok_r 将要标记化的字符串作为第一个参数。同一字符串的后续标记化应传递 NULL。 (可以使用不同的分隔符标记同一字符串。)
  • 第二个参数是可能的分隔符字符串。在您的情况下,您应该传递 "\n"。 (strtok_r 会将字符的延伸视为单个中断。这意味着对 "a\n\n\nb" 进行标记将产生两个标记。)
  • strtok_r 的第三个参数是函数的内部参数。它将标记下一个标记化应该开始的位置,但您不需要使用它。只需定义一个 char * 并传递其地址即可。
  • 特别是,不要将源字符串变量重新用作状态。在您的示例中,您将丢失 strduped 字符串的句柄,因此您以后无法释放它,而您应该这样做。
  • 目前尚不清楚您如何确定您的标记化“不起作用”。您重复将 token 打印到同一个字符缓冲区。您只想保留最后一个换行符之后的部分吗?在这种情况下,请使用 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, "\n", &state);
}

free(rest);

关于c - 遇到换行符时标记字符串 - 不工作换行符无法被识别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58999522/

相关文章:

VBA:调试。打印没有换行符?

Windows 和 Linux 上的 PHP_EOL

r - 创建持久的多行字符串

ios - NSLineSeparatorCharacter在哪里定义?

javascript - NodeJS 错误?执行在要返回的字符串之前有换行符的 return 语句时出错

c - C支持重载吗?

c - main()函数返回值?

c - 位移是否正确地隔离了不同字节序系统上的字节?

C 编程 : Error while printing all lines containing a specific word from a text file

c - Eclipse 并行工具平台 (Kepler) 中的 "Type ' MPI_Status ' could not be resolved"