为什么这会一直打印 "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");
}
}
出于某种原因,这将打印出“超出范围,请重试”。我尝试更改 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");
}
}