3.5 不要用错等于运算符

【例3.9】下面程序正确吗?


#include <stdio.h>
void main 
( 
)
{
         char ch
,c='H'
;
         char st[3]
,s="Hellow"
;
         ch=c
;
         st=s
;
         printf
("%c
,%s\n"
,ch
,st
);
}
  

编译给出:


error C2106
: '=' 
: left operand must be l-value
  

字符有“=”运算符,但字符串没有,所以语句“st=s;”不正确。解决的办法是使用strcpy函数,使用时包含定义它的头文件string.h即可。

【例3.10】使用strcpy函数的例子。


#include <stdio.h>
#include <string.h>
void main 
( 
)
{   
         char ch
,c='H'
;
         char st[3]
,s="Hellow"
;
         ch=c
;
         strcpy
(st
,s
);
         printf
("%c
,%s\n"
,ch
,st
);
}
  

输出结果为:


H
, Hellow
  

注意不要混淆数学运算符“=”和比较运算符“==”。

【例3.11】想在下面的程序中得到的输出是“5不等于6”,能实现吗?


#include <stdio.h>
void main 
( 
)
{
    int a=5
, b=6
;
    if
(a=b
)
              printf
("%d
等于%d\n"
,a
,b
);
    else     printf
("%d
不等于%d\n"
,a
,b
);
}
  

这里将比较运算符“==”错认为赋值运算符“=”。因为“a=b”使用等于运算符,所以使a的值为6。也就是if的表达式为6而不是0,根据if(6)不为0的条件,应执行else后面的语句,输出结果为“6不等于6”,这显然是错误的。

将if表达式改为


if
(a==b
)
  

则输出结果为:


5
不等于6
  

《C语言解惑》