如何在 C 中检查读入的字符串中的子字符串?
如果我有以下内容
char name[21];
fgets(name, 21, stdin);
如何检查字符串中的一系列子字符串?
如何检查字符之前的子字符串?例如,如何检查 =
符号之前的子字符串?
最佳答案
警惕strtok()
;它是不可重入的。除此之外,这意味着如果您需要在一个函数中调用它,然后调用另一个函数,并且如果另一个函数也使用 strtok()
,那么您的第一个函数就会变得困惑。它还会在分隔符上写入 NUL ('\0'
) 字节,因此它会修改输入字符串。如果您正在寻找多个终结者角色,您将无法分辨找到的是哪一个。此外,如果您编写一个库函数供其他人使用,但您的函数使用 strtok()
,您必须记录这一事实,以便函数的调用者不会被在调用您的函数后,他们自己的代码使用 strtok()
的失败。换句话说,它是有毒的;一般来说,如果您的函数调用 strtok()
,它会使您的函数不可重用;同样,使用 strtok()
的代码无法调用也使用它的其他人的函数。
如果您仍然喜欢该功能的想法 - 有些人喜欢(但我几乎总是避免它) - 那么在您的系统上寻找 strtok_r()
。它是可重入的;它需要一个额外的参数,这意味着其他函数可以使用 strtok_r()
(或 strtok()
),而不会影响您的函数。
有多种可能合适的替代方案。明显需要考虑的是 strchr()
、strrchr()
、strpbrk()
、strspn()
、 strcspn()
:这些都不会修改它们分析的字符串。所有这些都是标准 C 的一部分(strtok()
也是如此),因此它们基本上随处可用。在单个字符之前查找 Material 建议您应该使用 strchr()
。
关于c - 读取用户输入并检查字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4981935/