为什么这会一直打印 "out of range try again"?我该如何解决

why does this keep printing "out of range try again"? and how can i fix it

出于某种原因,这将打印出“超出范围,请重试”。我尝试更改 if 语句,但这也不起作用。

#define MAX_fn_LEN32
#define MAX_ln_LEN32
#define MAX_stA_LEN64
#define MAX_city_LEN32
#define MAX_state_LEN32
#define MAX_buffer_LEN32
#include <stdio.h>
#include <strings.h>
#include <stdlib.h>
#include <ctype.h>
#include <stdbool.h>
int main(){

char* fn=NULL;
bool a=false;

fn = malloc(32 * sizeof(char));;

printf("what is your first name?\n");
scanf("%s",fn);

while(a==false){

  if(fn==NULL ||fn>=(32*sizeof(char))){

    printf("Out of range try again.\n");
    scanf("%s",fn);
    a=false;
  }
  else{

    printf("This works.\n");
    a = true;
    return 0;
}

}
  free(fn);

}

出于某种原因,这将打印出“超出范围,请重试”。我尝试更改 if 语句,但这也不起作用。

if语句中的条件

if(fn==NULL ||fn>=(32*sizeof(char))){

没有意义。

将指针fn中存储的地址与值32 * ( sizeof( char )进行比较。

你的意思好像是

if(fn==NULL || strlen( fn ) >=(32*sizeof(char))){

但如果条件确实计算为真,那么您的程序具有未定义的行为。 要检查 fn 是否等于 NULL 你应该在内存分配之后做,例如

fn = malloc(32 * sizeof(char));;
if ( fn != NULL )
{
    printf("what is your first name?\n");
    if ( scanf("%31s",fn) == 1 )
    {
        printf("This works.\n");
    }
}