Kezdőoldal » Számítástechnika » Programozás » Miért működik rosszul az...

Miért működik rosszul az alábbi C++ program?

Figyelt kérdés

//main.cpp


# include <iostream>

# include <string.h>


int main(void) {


typedef unsigned short ushort ;


using std::cout ;

using std::cin ;

using std::endl ;


char str_Array[80] ;

cout << "Mi legyen a str_Array-ban: " ;

cin.get(str_Array, 79, '\n') ;


char str_ArrayTwo[strlen(str_Array) + 1] ;

strncpy(str_ArrayTwo, str_Array, strlen(str_Array)) ;


cout << "str_Array: " << str_Array << endl

<< "str_ArrayTwo: " << str_ArrayTwo << endl << endl ;


for(ushort i = 0; i < strlen(str_ArrayTwo) + 1; ++i)

cout << "str_ArrayTwo[" << i << "]: " << str_ArrayTwo[i] << endl ;


return int(0) ; }


/*Kimenet:

Mi legyen a str_Array-ban: Madár

str_Array: Madár

str_ArrayTwo: Madárţ" //Hogy kerül bele az a fura t és a " karakter?


str_ArrayTwo[0]: M

str_ArrayTwo[1]: a

str_ArrayTwo[2]: d

str_ArrayTwo[3]: á

str_ArrayTwo[4]: r

str_ArrayTwo[5]: ţ

str_ArrayTwo[6]: "

str_ArrayTwo[7]:


2012. okt. 4. 22:55
 1/10 anonim ***** válasza:
Túl hosszú a tömb a bejövő string számára, és amikor lefoglaltad, nem takarítottad ki, ezért memóriaszemét van a végén. Tegyél be csupa szóközből álló stringet a beolvasás előtt!
2012. okt. 4. 23:02
Hasznos számodra ez a válasz?
 2/10 A kérdező kommentje:
Nem értelek előző.
2012. okt. 4. 23:14
 3/10 A kérdező kommentje:

Előző nem szóköz karaktert kellet tenni a végére hanem karakterlánc végét jelző null karaktert '\0'.


Mert ha szóközzel töltöttem volna fel a karakterláncot akkor meg maga a szóköz lenne az adatszemét vagy mi.

2012. okt. 4. 23:22
 4/10 A kérdező kommentje:

Szóközzel töltöttem fel akkor is rossz volt egyébként.

null karakterrel lett jó.

2012. okt. 4. 23:23
 5/10 A kérdező kommentje:

A programoz kijavítottam működik jól.

Adtam zöld kezet.


Ha az utolsó sort ki íratom nagyon furcsa eredményt kapok de nem értem miért.Elt tudnátok magyarázni hogy ebben az esetebn mi folyik itt.


for(ushort i = 0; i < strlen(str_ArrayTwo) + 1; ++i)

cout << "str_ArrayTwo[" << i << "]: " << &str_ArrayTwo[i] << endl ; << endl ;

2012. okt. 5. 00:29
 6/10 A kérdező kommentje:
Amúgy meg,hogy lehet hogy a ciklus 8 szor lefut?
2012. okt. 5. 03:35
 7/10 iostream ***** válasza:

"char str_ArrayTwo[strlen(str_Array) + 1] ;"


Ez a deklaráció nem valid C++ kód.

2012. okt. 5. 09:24
Hasznos számodra ez a válasz?
 8/10 A kérdező kommentje:

Már tudom miért fut le a ciklus 8 szor.


De iostream mi az a valid?

2012. okt. 5. 17:17
 9/10 A kérdező kommentje:

Pedig ez a deklaráció helyes mert vissza adja a string hosszát + 1.


Ebben nincs semmi rossz tökéletesen működik.

2012. okt. 5. 17:18
 10/10 iostream ***** válasza:
Oké, ha jobban tudod, akkor nem szóltam.
2012. okt. 5. 21:21
Hasznos számodra ez a válasz?

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

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!