5 svar
108 visningar
Zined10 666
Postad: 29 mar 2023 14:09

Vad ska jag göra för att lösa problemet ?

Jag får bara ändra min dstring.c fil och jag undrar vad ska jag göra för att koden ska fungera ?. 

anders_k Online 234
Postad: 29 mar 2023 17:11

Vad har du gjort tills nu? Har du gjort någon av dessa funktioner?

Börjar med att göra test programmet, t.ex. i main(), includera denna header fil.

Sen ropa funktionerna och parallelt lägg till implementationen i in en dstring.c-fil

Zined10 666
Postad: 29 mar 2023 19:57

Jag löste det problemet och nu undrar jag vad ska jag göra för att programmet ska fungera ?.

Fermatrix 7841 – Fd. Medlem
Postad: 29 mar 2023 20:42 Redigerad: 29 mar 2023 20:42

&str ger dig adressen till str, är det verkligen det du vill använda i din malloc?

Vidare, såvida du inte försöker kompilera med en C++ compiler så ska du inte casta void* som malloc returnerar.

Din assert är inte sann eftersom du skapar en char* som endast är null-terminerad, dvs, den behandlas som om du hade skrivit char* str = NULL;

Zined10 666
Postad: 29 mar 2023 21:18
Dracaena skrev:

&str ger dig adressen till str, är det verkligen det du vill använda i din malloc?

Vidare, såvida du inte försöker kompilera med en C++ compiler så ska du inte casta void* som malloc returnerar.

Din assert är inte sann eftersom du skapar en char* som endast är null-terminerad, dvs, den behandlas som om du hade skrivit char* str = NULL;

Jag fortsätter att skriva imorgon

anders_k Online 234
Postad: 30 mar 2023 15:30 Redigerad: 30 mar 2023 15:31

assert använder man för att kolla programmeringsfel dvs t.ex. denna
funktion förväntar sig en sträng, men jag skickade in något annat.

man skall inte använda assert för att kolla retur värden
från runtime funktioner, istället skall du ha if () och sen
när du returnerar newStr så skall anroparen i sin tur kolla retur värdet
av dstring_initialize för att vara säker på att det gick bra.

 

DString dstring_initialize(const char* str)
{
  assert( str != NULL );
  DString newStr = malloc(strlen(str) + 1); // sizeof(char) är onödigt, det blir 1
  if (newStr != NULL)
  {
    strcpy(newStr, str);
  }
  return newStr;
}

 

Svara Avbryt
Close