我在parse()函数中找不到问题。简介: 我从我的终端程序发送“boot \ r \ n”,调用parse()函数,strncmp(缓冲区,“启动”,4)永远不会进入if分支? 此刻,我看不到树木的木材。 之后,从parse()函数返回的字符串将被提供给remove_cr_lf_chars()函数。我需要删除这些字符才能将字符串与图像名称进行比较,当然这些字符没有任何'\ r'或'\ n'字符。
static char *parse(void)
{
static char buffer[100];
char *p = buffer;
char c;
do {
while (!(USART1->SR & USART_FLAG_RXNE));
*p++ = c = ((char)USART1->DR);
} while (c != '\r' && p-buffer < sizeof buffer-1);
*p = '\0';
if (strncmp(buffer, "boot", 4))
{
p = buffer+4;
/* skip to argument, p might point to '\0' if none */
while (*p != '\0' && (*p == ' ' || *p == '\r')) p++;
return p;
}
return NULL;
}
static void remove_cr_lf_chars(char *dst)
{
for (; *dst != '\0'; dst++)
if (*dst != '\r' && *dst != '\n') dst++;
*dst = '\0';
}
答案 0 :(得分:7)
这是因为strncmp
在匹配时返回0。你需要改变你的状况:
if (!strncmp(buffer, "boot", 4)) ... // Means "if buffer is equal to "boot" "
返回值 返回一个整数值,表示字符串之间的关系: 零值表示两个字符串中比较的字符形成相同的字符串。 大于零的值表示不匹配的第一个字符在str1中的值大于在str2中的值;小于零的值表示相反。
答案 1 :(得分:3)
strncomp
返回0。因此,您需要在第13行修改您的条件。例如,您可以写:
if ( strncmp(buffer, "boot", 4) == 0)
答案 2 :(得分:1)
匹配时strcmp
和strncmp
返回0
。
您应该使用if (!strncmp(buffer, "boot", 4))
。