-1

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

  }

関数呼び出しに入ろうとすると、それが false*f_resetとして評価されることは決してないことがわかります。これは、ガベージなどのために常に true です。0-8342345825

使用している理由char*は、おそらく昔は boolean が char *? よりも多くのメモリを使用していたためです。過去に Stackoverflow の投稿で読んだもの。

char*論理的 true false との関係について、ダミーのガイドを教えてもらえますか?

4

3 に答える 3

1

Cにはブール型はありません。ステートメントevalueteifは整数のみであるため、整数値 0 は false で、それ以外はすべて true です。型はchar8 ビット整数として使用できます。

文字値:

char var = '0';

整数値48( ASCII テーブルを参照) に対応し、整数値 0 には対応しません。

あなたの例では、char ポインターがあります。しかし、あなたの if ステートメントでは、ポインタを評価するのではなく、その値を評価しています。そのため、*f_reset が0false と評価されるには (integer) である必要があります。

char var = 0;

...
myFunc(&var);
...
于 2013-10-10T07:34:23.277 に答える
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");

}
于 2013-10-10T09:14:03.837 に答える
-1
#include<stdio.h>
int main()
{
char *x;
char a=0;
x=&a;

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

return 0;
}
于 2013-10-10T07:33:23.543 に答える