【发布时间】:2016-02-13 21:12:34
【问题描述】:
我有一个如下所示的字符串:
char *string = "This is a\r string\r\nTTTT";
我想在哪里检查一个字符串(例如上面的 \r 和 \r\n 字符,但是,简单地使用 strcmp 是行不通的。例如:
if (strcmp(string, "\r\n") == 0) {
if (strcmp(string, "\n) == 0) {
printf("The string contains both a newline, and "\r\n" characters");
}
}
memcmp 和 strncmp 似乎也不起作用:
if (memcmp(string, "\r\n", 2) == 0) {
if (memcmp(string, "\n", 1) == 0) {
printf("The string contains both a newline, and "\r\n" characters");
}
}
我也试过这个(这有点工作,但后来没有)。
int i;
for (i = 0; i < strlen(string); i++) {
if (string[i] == '\n') {
if (strcmp(string, "\r\n") == 0) {
printf("The string contains both a newline, and "\r\n" characters");
}
}
}
我尝试的最后一个方法确实找到了换行符,但找不到“\r\n”字符。上面的另外两个根本不起作用,有什么想法吗?
【问题讨论】:
-
目前尚不清楚预期的行为应该是什么。找到
\r或\n中的第一个?那将是 strpbrk()。 所有的出现?您想tokenize 输入字符串,使用这些字符作为分隔符吗?请更准确。无论哪种方式,请熟悉the string functions,那里有满足各种需求的东西。 -
寻找一个字符串,其中“\r\n”不在行尾,并且还包含一个“\n”字符。
-
因为在我的字符串中,“\r\n”不在行尾,并且不遵循“\r\n”字符位于末尾的 Windows 约定,而UNIX 的末尾有“\n”约定。基本上,这是一个字符串不遵循正确约定的错误情况。
-
要检测“混合行尾”,您需要扫描
\r并检查它后面是否跟\n。如果是/不是,则继续扫描\r,直到找到一个不是/后跟\n。 -
在您的代码片段中,您没有正确转义
"The string contains both a newline, and "\r\n" characters"字符串中的"。