NAPRAW: Błąd Cytowania Wskaźnika C

NAPRAW: Błąd Cytowania Wskaźnika C

Jeśli zobaczysz błąd porównania sugestii liczb całkowitych c, poniższy wpis na blogu powinien ci pomóc.

Czy Twój komputer działa wolno, często ulega awarii lub po prostu nie działa tak dobrze? W takim razie potrzebujesz Reimage!

if (*wiadomość == "")
Ostrzeżenie: porównanie sugestii z liczbą całkowitą („liczba całkowita” i „samochód *”)

… z pewnością będziesz faktycznie porównywał każdy int między char * lub dokładniej int za pomocą dyskusji samochód kod>.

if(*message == '') ...if(message[0] == '') ...jeśli(!*wiadomość)...

Przy okazji, pod warunkiem, że chcesz znaleźć każdy najniższy łańcuch, musisz użyć strcmp ani strncmp z string.h.

Cześć, uczę się C i mam pytanie dotyczące kodu, który nie działa.

przegląd błędów między wskaźnikiem integer c

Jestem wynikiem książki “Head First C”, podczas gdy ten konkretny kod jest zdecydowanie tylko jednym z ćwiczeń:

#include #include wnętrze()    znak nazwa_mapy[3];    puts("Podaj typ karty: ");    scanf("%2s", nazwa mapy);    wartość całkowita oznacza 0;    akceptowane (nazwa_karty[0] == 'K')            cena rynkowa oznacza 10;     w przeciwnym razie tylko w wystąpieniu (nazwa_karty == 'Q')        val oznacza 10;     opcjonalnie czy nie (card_name == 'J')        wartość równa 10;     inne rzeczy, jeśli (nazwa_karty == 'A')        konkretna wartość to 11;     Następny        val równa się atoi(nazwa mapy);        printf("Wartość mapy pamięci: %in", val);    dochód 0;
cards.c: zwraca wyniki „podstawowe”:cards.c:14:26: Alarm porównawczy: między wskaźnikami do tej liczby całkowitej      inne sytuacje, jeśli (nazwa_karty == 'Q')                          ^~cards.c:16:26: Ostrzeżenie: porównanie między liczbami całkowitymi oferty z more if (nazwa_karty == 'J')                          ^~cards.c:18:26: Ostrzeżenie: zgrubne porównanie między końcówką a liczbą całkowitą      else if (słowo na mapie == 'A') {

EJeśli dodatkowo uruchomię tę sytuację, program naciśnie „K” jako recenzje, które funkcja printf zwraca mi na rynku jako 10 po zakończeniu testu.

Ale każdy inny wpis, który znajdzie Q lub j A, zawsze zwraca 0 do printf.

porównanie błędów między podpowiedź integer c

Zaczynam rozumieć dlaczego, niestety teraz mój personel jest tutaj przywiązany.

Pytanie

Chcesz dowiedzieć się więcej o ostrzeżeniach krzyżowych: kontrast między wskaźnikami a liczbami całkowitymi w programowaniu w C

Użytkownik5514593

Jak naprawić porównanie błędów między końcówką a liczbą całkowitą?

Prawidłowe podejście polega na porównaniu tego z prawie wszystkim tego samego typu, w takim przypadku rozważ odtwarzacz zerowy ‘’. Tutaj str[i] jest znakiem, widzisz, specjalny NULL jest wskaźnikiem, co oznacza, że ​​nie możemy ich logicznie porównać.

668 widoczność0 arrow_circle_up0arrow_circle_down

Odpowiedź to 10

Odpowiedź: wiele potwierdzonych

Odpowiedź – 3

Odpowiedź 2 .

Poniższy program to bardzo lekki program, który znalazłem, gdy myślałem o rozglądaniu się. Jest ostrzeżenie: porównanie końcówki i liczby całkowitej

 if ( NULL == '1' )

Po prostu nie mogę zrozumieć, co jest również wskaźnikiem, który z kolei jest tym, co zawsze było liczbą całkowitą, a co ważniejsze, dlaczego?

Mógłbym po prostu powiedzieć, że NULL jest tutaj praktycznie każdą sztuczką, ale nie rozumiem dlaczego?

Tak, jeszcze jedno: za każdym razem, gdy osobiście zamieniam NULL na '', żaden wygenerowany klip wideo nie jest tworzony. Dlaczego?

#include wnętrze()    musi ( NULL == '1' )           printf("nPrawda");        inny; różny            printf("nFałsz");        zachęty 0;

Czy NULL jest równe 1 w c?

NULL jest zwykle dobrą liczbą całkowitą, która jest jednolicie równa zero lub (void*)0 lub na przykład ,. Może to być inna funkcja lub typ. Może kończyć się na ((int*)0xDEADBEEF), bez względu na to, jak dziwnie mogą brzmieć. NULL może być godną zaufania modą int.

0 arrow_circle_up0arrow_circle_down

#define NULL 0

Jak liczba całkowita jest porównywana do argv?

num jest liczbą całkowitą, podaną, gdy argv[1] jest łańcuchem, który może (lub nie) reprezentować ich liczbę całkowitą. Możesz porównywać tylko systemy zawierające ten sam typ, więc czasami możesz porównać łańcuch z łańcuchem lub znacznie lepszą liczbę całkowitą z liczbą całkowitą: if (strcmp(argv[1], “3”) == 0) //

#define NULL ((nieważne na *)0)

Na podstawie otrzymanego komunikatu ostrzegawczego wygląda na to, że Twoje użycie jest późną definicją.

Więc równoważność generuje komunikat flagowy wskazujący, że porównujesz pewien rodzaj wskaźnika i int. Literały znakowe wewnątrz C zawsze były typu int.

Tak, inny element dzieje się, gdy pozbędziemy się wartości NULL za pomocą Then ‘’ często oznacza brak ostrzeżenia o kompilacji. Dlaczego?

To jest parsowanie rzeczywistości ('') int z zaangażowanym int ( '1' ) pasuje.

0 arrow_circle_up0arrow_circle_down

Cóż, możesz głównie porównywać rzeczy, które są wewnętrznie podobne. Wtedy liczby całkowite są zbyt niepodobne do adresów, aby je porównywać; Liczby całkowite są niewątpliwie wartościami, a funkcje są wskaźnikami, które zapewniają wartości, których zastosowania mogą być zbyt zróżnicowane, aby można je było uznać za porównywalne.

NULL jest zdefiniowany jako ((void *)0), co jest zwykle specjalnym, powtarzającym się wskaźnikiem, oznaczającym wskaźnik, który nigdy niczego nie wskazuje. wprowadź jako wskaźnik. void jest bardzo * ogólnym typem wskazówki.

1 jest stałą dla char (przypuszczalnie ten cenny jest znak indeksu wskazujący co najmniej jeden w tabeli ASCII, obecnie znany jako znak SOH). Symbol jest z grubsza godną zaufania liczbą, która raczej ze wszystkiego można łatwo przekonwertować na nadmiernie pełny znak po wydrukowaniu. Twój literał może być zapisany tylko jako znak 1, pamiętaj jednak, że dla wydajności w prawie wszystkich wyrażeniach matematycznych z wyrażeniami porównawczymi każdy znak jest stale konwertowany na int.

Możesz więc zwykle porównywać wskaźnik do głównej ładnej liczby całkowitej, tak jak mówi kompilator danej osoby. Nie było to ściśle kryminalizowane, ale generalnie, jak zwykle, zazwyczaj kompilator ma poważne obawy do tego czasu i ostrzega. Właściwie twoje odbicie nie ma sensu.

Jeśli naprawdę chcesz porównać każdą osobę (znowu, prawie głupio), możesz:

  1. przekonwertuj wskaźnik na swój int (jest to niebezpieczne, ponieważ podczas pracy tak naprawdę tracisz informacje): `((int)NULL) == ‘1’,
  2. przekonwertuj literał w odniesieniu do wskaźnika (mniej niebezpieczny, ale całkiem prawdopodobnie głupi): `NULL == (void *)’1′

1 arrow_circle_up0arrow_circle_down

NULL, 0 czyli '' mają zdecydowanie inne aktualizacje. Więcej szczegółowych informacji można znaleźć tutaj. NULL ostatecznie oznacza null, a bez wątpienia wskaźnik 0 jest spójnym literałem powiązanym z liczbą całkowitą 0. Możesz zaimplementować stałe literały dla liczby całkowitej, stale wskaźniki całkowite 0. specjalne znaczenie w tych przypadkach. Oznacza to, że człowiek będzie używał 0 we wszystkich takich środowiskach, ale NULL powinien być używany tylko do wskaźników. Jeśli początkowo miałbyś kupić inną liczbę całkowitą w porównaniu z tym, co wynosi 0, porównanie jej z okazją nie zrobiłoby dużej różnicy. Bądź rozsądny, że podczas używania c/c++ nie powinieneś wiedzieć, jak wyświetlane są wskaźniki, aby można było ich używać na sprzęcie.

W C, null może być zwykle zaimplementowane jako ((void*)0). W C++ wszystko można zaimplementować z tego powodu, że 0 tak jak ty


Jednorazowe rozwiązanie wszystkich problemów związanych z systemem Windows

Czy otrzymujesz niebieski ekran śmierci? Restoro naprawi wszystkie te problemy i nie tylko. Oprogramowanie, które umożliwia naprawienie szerokiego zakresu problemów i problemów związanych z systemem Windows. Może łatwo i szybko rozpoznać wszelkie błędy systemu Windows (w tym przerażający niebieski ekran śmierci) i podjąć odpowiednie kroki w celu rozwiązania tych problemów. Aplikacja wykryje również pliki i aplikacje, które często ulegają awariom, umożliwiając naprawienie ich problemów jednym kliknięciem.

  • 1. Pobierz i zainstaluj Reimage
  • 2. Uruchom aplikację i kliknij „Skanuj w poszukiwaniu problemów”
  • 3. Kliknij przycisk „Napraw wszystkie problemy”, aby rozpocząć proces naprawy

  • Jeśli wersja C NULL == 0, zrównaj liczbę całkowitą za pomocą wskaźnika. Ponadto, ponieważ 0 jest ogromnym literałem ciągłym dla liczby całkowitej, ma specjalne znaczenie i nie organizuje ostrzeżenia ani błędu. Ale jeśli masz tutaj samotną liczbę całkowitą, 1, porównanie następnej z NULL może nie mieć sensu.

    0 arrow_circle_up0arrow_circle_down

    Rozsądne jest dokonywanie pomiarów NULL z adresami pamięci . ! 1 wyraźnie nie jest użytecznym przepełnieniem retencji pamięci, ale 0 jest adresem przestrzeni pamięci, który normalnie zostałby umieszczony. Jeśli porównasz NULL z jakąkolwiek konwencją niewskażnikową inną niż 0, względem siebie nawzajem rzeczywiście wskazuje poprawny błąd i dlatego otrzymujesz to ostatnie ostrzeżenie.

    Możesz pomyśleć o nieoficjalnym, ale powszechnym makrze NUL, które jest faktycznie zdefiniowane jako ''.

    >

    Zdobądź Reimage i napraw komputer w mniej niż 5 minut. Pobierz teraz.

    Polish