char * и boolean TRUE FALSE в C

У меня есть часть устаревшего кода, который имеет аргументы функции 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* и логическим истинным ложным?

-1
источник поделиться
3 ответа

В C нет булевского типа. if statment оценивает только intergers, поэтому целочисленное значение 0 является ложным, все остальное - true. Тип char может использоваться как целое число 8 бит.

Значение char:

char var = '0';

соответствуют целочисленному значению 48 (см. таблицу ASCII), а не целочисленному значению 0.

В вашем примере у вас есть указатель на символ. Но в вашем статусе if вы не оцениваете указатель, а его значение; поэтому * f_reset должно быть 0 (целое число), которое должно быть оценено как false.

char var = 0;

...
myFunc(&var);
...
+1
источник
#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");

}
0
источник
#include<stdio.h>
int main()
{
char *x;
char a=0;
x=&a;

if(*x)
printf("true");
else
printf("false");

return 0;
}
-1
источник

Посмотрите другие вопросы по меткам или Задайте вопрос