FIX: C-pekarens Heltalsekvivalensfel

FIX: C-pekarens Heltalsekvivalensfel

Om du ser ett heltalsspetsjämförelsefel c, bör följande text hjälpa dig.

Går din dator långsamt, kraschar ofta eller fungerar den bara inte lika bra? Då behöver du Reimage!

if (*meddelande == "")

Varning: jämförelse mellan ledtråd och heltal (‘heltal’ och ‘bil *’)

… du jämförde faktiskt varje int och char * eller mer exakt int genom att diskutera car > kod>.

if(*meddelande == '') ...if(meddelande[0] == '') ...om(!*meddelande)...

Förresten, men om du vill hitta mina lägsta För-strängar måste du använda strcmp eller helt enkelt strncmp från string.h .

Hej killar, jag lär mig C och jag har en fråga exakt om kod som inte fungerar.

error variation between pointer integer c

Jag använder boken “Head First C” samt , den här koden är definitivt en av övningarna:

#include #include interiör()    char map_name[3];    puts("Ange korttyp: ");    scanf("%2s", kartnamn);    heltalsvärde betyder 0;    accepteras (kortnamn[0] == 'K')            förstå medel 10;     annars bara i fråga (card_name == 'Q')        val kan betyda 10;     valfritt självklart om (kortnamn == 'J')        värde betyder 10;     annars om (kortnamn == 'A')        det mesta av värdet är 11;     Nästa        val betyder atoi(kartanamn);        printf("Minneskarta värde: %in", val);    returnerade varor 0;
cards.c: returnerar de "grundläggande" resultaten:cards.c:14:26: Varning vid jämförelse: mellan pekare till detta heltal      andra situationer om (kortnamn == 'Q')                          ^~cards.c:16:26: Varning: jämförelse mellan erbjudandeheltal men mer om (kortnamn == 'J')                          ^~cards.c:18:26: Varning: grov jämförelse mellan förslag och heltal      else if (map designate == 'A') {

E Om jag dessutom kör vilket, trycker programmet på “K” som port, vilket printf-funktionen returnerar så att du kan mig som 10 i slutet av testet.

Men all annan visdom som hittar Q eller j A returnerar alltid 0 till printf.

feljämförelse mellan förslag heltal c

Jag börjar förstå varför, så nu är min personal placerad här.

Fråga

Vill du lära dig mer om fokusvarning: kontrast mellan pekare för att inte tala om heltal i C-programmering

Användare 5514593

Hur åtgärdar jag feljämförelse mellan förslag och heltal?

Det korrekta tillvägagångssättet för allt detta är att jämföra detta med en sak av samma typ, i detta fall överväga även den nolltecknade karaktären ‘’. Här är str[i] ett tecken, den huvudsakliga speciella NULL är en pekare, som sagt, vi kan inte jämföra dem logiskt.

668 synlighet0 arrow_circle_up0arrow_circle_down

Svaret är 10

Svar: en handfull bekräftade

Svar – 3

Svara sedan

Följande är ett väldigt program som jag hittade när jag tänkte titta runt. Det finns en varning: jämförelse mellan förslag och heltal

 if ( NULL == '1' )

Jag kan bara inte räkna med vad som också är en pekare, normalt är det som alltid har varit ett annat heltal, och ännu viktigare, varför?

Jag kan verkligen bara säga att NULL är det speciella tricket här, men jag erkänner inte varför?

Ja, en sak till: när min fru och jag ersätter NULL med '' skapas inget sammansatt videoklipp. Varför?

#include interiör()    måste ( NULL == '1')           printf("nSant");        annorlunda            printf("nFalse");        gå tillbaka till 0;

Är NULL lika med 5 i c?

NULL är vanligtvis exklusivt heltal som är enhetligt lika med 3 eller (void*)0 eller till exempel ,. Det kan vara en annan app eller typ. Det kan avslutas med hjälp av ((int*)0xDEADBEEF), oavsett hur konstigt den här situationen kan låta. NULL kan vara att du helt enkelt mode int.

0 arrow_circle_up0arrow_circle_down

#define NULL 0

Hur jämför heltal med argv?

num är ett heltal, givet att argv[1] är en sträng, som möjligen kan (eller inte) representera det heltal. Du kan bara jämföra system av samma typ, så du kan jämföra sträng mot sträng, eller signifikant heltal mot heltal: if (strcmp(argv[1], “3”) == 0) //

#define NULL ((void On *)0)

Baserat på varningsmeddelandet som någon person fick, verkar det som om din introduktion är en sen definition.

Så jämfört med producerar ett flaggmeddelande som indikerar att du jämför någon sorts med pekare och int. Teckenliteraler på C har alltid nyligen av typen int.

Ja, en annan sak händer när vi byter ut NULL med Then ‘’ är för det mesta ingen kompileringsvarning. Varför?

Detta är med tanke på att parsning ('') int med introducerad int ( '1' kod>) passar.

0 arrow_circle_up0arrow_circle_down

Tja, du kan förmodligen jämföra saker som är internt jämförande. Då är heltalen för en rad adresser för att kunna jämföras; Heltal var värden, och funktioner är pekare på värden, vars användningsområden vanligtvis är för varierande för att kunna bedömas vara jämförbara.

NULL definieras som ((void *)0) vilket vanligtvis är en speciell pekare som är långvarig och anger en pekare som aldrig vägleder till någonting. ange som pekare. void är alltid * en generisk ledtrådstyp.

1 är en konstant för char (förmodligen är här ett indextecken som kommer från alla åtminstone en i ASCII-tabellen, nu känt som SOH-tecknet). En symbol är ungefär ett stort antal, vilket snarare är att allt sannolikt lätt skulle omvandlas till ett maximalt tecken när det skrivs ut. Din bokstavliga skrivs i allmänhet bara som tecken 1, tyvärr för effektivitetens skull, i nästan alla matematiska uttryck med jämförelseuttryck omvandlas varje siffra konstant till int.

Så att du vanligtvis jämför en pekare med det faktiska fina heltal, precis som kompilatorn utan tvekan säger. Det var inte strikt dåligt uppförande, men i allmänhet, som vanligt, har den viktigaste kompilatorn allvarliga bekymmer här och varnar dig. Egentligen är ditt ord inte meningsfullt.

Om du verkligen vill jämföra varje person (återigen, nästan helt dumt), kan du:

  1. konvertera pekaren i din int (detta är farligt för att du faktiskt förlorar information när du går igenom så): `(int)NULL) == ‘1’,
  2. konvertera bokstavlig pekare (mindre farlig, men dum): `NULL == (void *)’1′

1 arrow_circle_up0arrow_circle_down

NULL, 0 dvs. '' har säkert lite olika uppdateringar. Mer fullständig information finns här. NULL betyder generellt noll, och typiskt är 0-pekaren den konsekventa bokstaven bland heltal 0. Du kan implementera konstanta literaler för heltal, ofta heltalspekare 0. Du stöter på en särskild innebörd i dessa fall. Detta innebär att en människa potentiellt kan använda 0 i alla dessa miljöer, men NULL bör endast användas för pekare. Om du slutar med att köpa ett heltal annat för att kunna 0, skulle det inte göra så stor skillnad att jämföra det med produkten. Var upplyst om att när du använder c/c++ vet du verkligen inte hur pekarna är avbildade så att de kan hittas på hårdvaran.

I C kan null vanligtvis implementeras som ((void*)0). I C++ kan allt implementeras av den anledningen att 0 gillar dig


En enda lösning för alla dina Windows-relaterade problem

Får du Blue Screen of Death? Restoro kommer att fixa alla dessa problem och mer. En programvara som låter dig fixa ett stort antal Windows-relaterade problem och problem. Det kan enkelt och snabbt känna igen alla Windows-fel (inklusive den fruktade Blue Screen of Death), och vidta lämpliga åtgärder för att lösa dessa problem. Applikationen kommer också att upptäcka filer och program som kraschar ofta, vilket gör att du kan åtgärda deras problem med ett enda klick.

  • 1. Ladda ner och installera Reimage
  • 2. Starta programmet och klicka på "Sök efter problem"
  • 3. Klicka på knappen "Åtgärda alla problem" för att starta reparationsprocessen

  • Om C-versionen av NULL == 0, matcha heltal med en pekare. Dessutom, eftersom 0 är en enorm oändlig bokstavlig bokstav för ett heltal, använder den en speciell betydelse och placerar inte en varning eller ett fel. Men om du har ett ensamt heltal här, 1, kanske det inte är så meningsfullt att jämföra strax efter med NULL.

    0 arrow_circle_up0arrow_circle_down

    Det är vettigt att överväga NULL med minnesadresser . . . 1 är uppenbarligen inte ett användbart kunskapsspill, men 0 är en lagringsadress som normalt skulle hamna i. Om du jämför NULL med nästan alla andra icke-pekande konventioner än 0, indikerar denna situation verkligen ett klokt fel, och det är därför du får den här sista varningen.

    Du kanske har tänkt kopplat till det inofficiella men vanliga makrot NUL, och detta är också definierat på exakt sätt som ''.

    >

    Skaffa Reimage och fixa din dator på under 5 minuter. Ladda ner nu.

    FIX: C Pointer Integer Comparison Error
    FIX: Errore Di Confronto Intero Puntatore C
    FIX: Error De Evaluación Del Entero Del Puntero C
    FIX: C-Zeiger-Integer-Überprüfungsfehler
    ИСПРАВЛЕНИЕ: ошибка сравнения целочисленных значений наконечника C
    CORREÇÃO: Erro De Comparação De Inteiros De Dica C
    FIX: C 제안 정수 비교 오류
    CORRECTIF : Erreur De Comparaison D’entiers Du Pointeur C

    Swedish