Má tu niekto skúsenosti s knižnicou greatest.h ? Compare NULL & String rubrika: Programování: C/C++

10 Mlocik97
položil/-a 31.3. 23:17

Zdravím potreboval by som poradiť ohľadom knižnice greatest.h...

Mám dajme tomu kód:

TEST reverse_test_3() {
  char* reversed = reverse("impact");
  ASSERT_STR_EQ("TCAPMI", reversed);
  free(reversed);
    reversed = NULL;
  PASS();
}

avšak ak reverse vráti NULL, tak mám segfault,... viem kde je chyba, a že ASSERT_STR_EQ nemôže porovnávať string a NULL. Ako bych ale mal ošetriť takýto prípad? Môže to byť aj naopak že očakávaný je NULL a výsledok funkce bude string. vtedy pre prípad ASSERT_EQ len.

Komentáře

  • roman.hocke : Nestačilo by prostě ASSERT(reversed != NULL); ASSERT_STR_EQ("TCAPMI", reversed); ? 3.4. 10:51
  • mato7d5 : assert() pomôže iba v debug verzii, ak je nutné testovat aj release tak assert() mu nepomôže. 3.4. 21:25
  • uetoyo : @mato7d5 To macro ASSERT v greatest ale není ze základní knihovny (?). 8.4. 9:28
  • mato7d5 : @uetoyo: ano, je zo standardnej kniznice. 9.4. 14:14
  • uetoyo : @mato7d5 Tak mi ukaž kde, jsem slepej: https://github.com/silentbicycle/greatest/blob/master/greatest.h 10.4. 20:01
  • Mlocik97 : uetoyo víš čo vôbec znamená pojem štandardná knižnica? A greatest.c nieje štandardná knižnica, assert však je zo štandardnej knižnice. Preštuduj si základy C. 11.4. 8:26
  • uetoyo : Ano assert je ze základní knižnice, proto se podívej, že ta knihovna nikde assert ze základní knihovny nepoužívá a tudíž argument o nějaké debug verzi je úplně mimo. @roman.hocke psal o ASSERT makru z greatest ne o assert z std. knihovny. Vypadá to, že základy C potřebuješ spíš ty, když si neumíš otestovat hodnotu na NULL. Máš test navíc ne úplně štastně napsaný. Pokud ti funkce vrací NULL pak zřejmě, když vstup byl NULL a to testuješ v samostatném testu, ne že to odchytáváš jako náhodnou věc, aby ti nespadl test. Ale jako domácí úkol to je fajn. 12.4. 8:38
odkaz Vyřešeno
7 mato7d5
odpověděl/-a 1.4. 17:27
 
upravil/-a 1.4. 17:28
TEST reverse_test_3() {
  char* reversed = reverse("impact");
  if (reversed) {
     ASSERT_STR_EQ("TCAPMI", reversed);
     free(reversed);
       reversed = NULL;
     PASS();
  }
  else {
     // si je chyba ak reverse vratila NULL, takze test moze failnut
  }
}
<code>

Komentáře

  • Mlocik97 : ďakujem,... 1.4. 18:04

Pro zobrazení všech 2 odpovědí se prosím přihlaste:

Rychlé přihlášení přes sociální sítě:

Nebo se přihlaste jménem a heslem:

Zadejte prosím svou e-mailovou adresu.
Zadejte své heslo.