Hogyan tudom ezt kijavítani a C programomban?
Sziasztok! Miért csinálja azt a programom, hogyha visszafelé nagybetűkkel akarom kiiaratni a Hello world! mondatom, akkor ezt kapom helyette: ômuco!DLROW OLLEH. Nem mindenhol ír ki az elejére ilyesmiket. Kipróbáltam a Hogy vagy?-gyal is, az eredmény: ômucoD\?YGAV YGOH. Hogyan tudom kijavítani ezt a hibát a C programomban? Miért csinálja, és hogyan javítható?
#include <stdio.h>
#include <string.h>
char* reverse(const char* text)
{
char *copy = (char*)malloc(strlen(text) + 1); // Helyet csinál a kópiának.
int i = 0;
do{
copy[i]=toupper(text[i]); //Átesz mindent nagybetűvé.
i++;
}while( text[i] != '\0' );
strrev(copy); //Átalakítja visszafelé.
return copy;
if (text==NULL) //Ha a megadadott szöveg NULL, akkor térjen vissza a NULL értékhez.
return NULL;
}
int main()
{
const char* text="Hello world!";
char* reversed = reverse(text);
printf("\nBefore: %s\nAfter: %s\n",text,reversed);
// "!DLROW OLLEH"
free(reversed);
}
Azt talán sehogy.
A stringed végét egészítsd ki (termináld) egy nullával. (\0)
Nem az a lényeg, bár én egy for ciklust használnék:
for (int i = 0; i < strlen(text); i++)
A megoldás a copy után ez:
buffer[strlen(text)] = '\0'
Egyébként más problémát is látok, többeközt deadcode-ot.
size_t i;
for(i = 0; i <= strlen(text); i++) {
copy[i] = toupper(text[i]);
}
Mindemellett sok más hiba is van a kódban amibe bele lehetne kötni.
1. String literal típusa char* nem cont char*
2. Nem szoktunk függvényen belül foglalni területet és azzal visszatérni, a buffert argumentumba szokás átadni
3. strrev() nem a standard része, nem működik minden rendszeren, a szöveg megfordítására vannak egyszerűbb módok is.
4. return copy; utáni kód soha nem fog lefutni.
5. A már említett do while ciklus feltétele logikailag hibás
6. A toupper a <ctype.h>-ban van deklarálva
Ha manuálian másolnád át mindezt akkor még gyorsabb is lenne mert egy ciklus alatt elintézed a megfordítást és a nagybetűvé alakítást.
A return utáni nullos rész soha semmilyen körülmények közt nem fog lefutni.
A használaton kívüli kódot nevezzük halottnak.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!