我有一段遗留代码,它有char*
个函数参数,用于if-then-else逻辑流程。例如:
void myFunc(char *f_reset) {
.....
.....
if(*f_reset) {// do this;}
else {// do that;}
}
假设我从myFunc(char *f_reset)
main()
void main(void) {
char r = 0;
char *f_reset = &r;
*f_reset = 0;
myFunc(f_reset); // Debug and enter this function
}
当我尝试进入函数调用时,我发现*f_reset
永远不会被评估为0
,即为false - 它总是正确的,因为有些垃圾-8342345825
或类似的东西
它使用char*
的原因可能是因为在过去,boolean占用的内存多于char *?我在Stackoverflow帖子中读过的一些东西。
有人可以给我一个关于char*
和逻辑真假的关系的假指南吗?
答案 0 :(得分:1)
在 C 中,没有布尔类型。 if
statment evaluete只有intergers,所以整数值0为false,其他任何都是true。 char
类型可以用作8位整数。
char值:
char var = '0';
对应于整数值48
(参见ASCII table)而不是整数值0。
在您的示例中,您有一个char指针。但是在你的if语句中你不是在评估指针,而是它的值;所以,* f_reset必须是0
(整数)才能被评估为false。
char var = 0;
...
myFunc(&var);
...
答案 1 :(得分:0)
#include<stdio.h>
#define TRUE 1
#define FALSE 0
void myFunc(char *);
int main()
{
char r = FALSE;
char *f_reset = &r;
myFunc(f_reset); // Debug and enter this function
}
void myFunc(char *f_reset)
{
if(*f_reset)
printf("true");
else
printf("false");
}
答案 2 :(得分:-1)
#include<stdio.h>
int main()
{
char *x;
char a=0;
x=&a;
if(*x)
printf("true");
else
printf("false");
return 0;
}