2011-02-28 130 views
0

如何比较没有换行符的缓冲区与字符串?缓冲区比较(无新行字符)与字符串

STRCMP(缓冲,“变”)没有返回0。

+0

没有换行符或没有NUL终止符?因为如果它只是没有换行符,我不会看到问题出在哪里...... – 2011-02-28 11:26:18

+0

您需要提供一些更多信息。字符串是怎样的? – 2011-02-28 11:28:33

+0

你需要指定'buffer'有什么内容。 – 2011-03-01 10:02:38

回答

1

strncmp是你可以用它来做到这一点的功能。

+0

我猜他问了这个问题是正确的答案,所以+ 1 XD – slezica 2011-02-28 13:18:22

+0

@santiago strncmp()不会解决问题。 – Algorithmist 2011-02-28 16:39:13

+0

@Algorithmist你必须被告知关于这个问题的更多细节比我更多! – slezica 2011-02-28 21:22:00

0

从你的文章中,我假设你已经在 '缓冲' 一\ n所以这将失败

strcmp(buffer,"change") 

为了比较写,而不是

strncmp(buffer,"change",strlen("change")) 

或更好

char keyword[] = "change"; 
strncmp(buffer,keyword,strlen(keyword) 
+0

不会返回不正确的结果,如果缓冲区=“更改”?因为它只会和e比较,直到那时它们才是相同的。 – 2013-01-14 18:42:31

+0

是的,但避免这种情况的唯一方法是用\ 0替换\ n,然后对完整的字符串执行strcmp。 – 2013-01-15 10:40:21

0

除了建议的strncmp,您可以在比较前从缓冲区中删除'\n' ...

char buffer[WHATEVER]; 
if (!fgets(buffer, sizeof buffer, stdin)) /* uh oh */ exit(EXIT_FAILURE); 

{ /* validate buffer and remove trailing '\n' */ 
    size_t buflen; 
    buflen = strlen(buffer); 
    if (!buflen) /* oh uh */ exit(EXIT_FAILURE); 
    if (buffer[buflen - 1] != '\n') /* oh uh */ exit(EXIT_FAILURE); 
    buffer[buflen - 1] = 0; 
} 

if (strcmp(buffer, "change") == 0) /* "change" found */;