因为name
和vname
不包含字符串。通过为每个字符指定4的大小,并以4个字符的字符串作为初始值设定项,您告诉编译器只存储4个字符而不是'\0'
空字符标记字符串的结尾。
行为未定义;你(幸运的),它不只是崩溃。
取出4
(或将其更改为5
):
char name[] = "sara";
char vname[] = "sara";
编辑:这里有一个修复等几个问题(见注释)程序的修改版本。其他在name
和vname
的声明中省略4
,大多数更改与您的问题没有直接关系。
#include <stdio.h> /* needed for printf */
#include <string.h> /* needed for strcmp */
int main(void) /* correct declaration of "main" */
{
char name[] = "sara"; /* omit 4 */
char vname[] = "sara"; /* omit 4 */
if (strcmp(name, vname) == 0)
{
printf("OK\n"); /* \n is at the *end* of the line */
}
else
{
printf("Error\n"); /* as above */
}
return 0; /* not absolutely required, but good style */
}
这不是特别相关的问题,但C++不允许'char name [4] =“sara”;';如果你指定了尺寸,你必须有足够的空间放置尾部的'\'。 –