Miért működik rosszul az alábbi C++ program?
//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]:
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.
Szóközzel töltöttem fel akkor is rossz volt egyébként.
null karakterrel lett jó.
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 ;
"char str_ArrayTwo[strlen(str_Array) + 1] ;"
Ez a deklaráció nem valid C++ kód.
Már tudom miért fut le a ciklus 8 szor.
De iostream mi az a valid?
Pedig ez a deklaráció helyes mert vissza adja a string hosszát + 1.
Ebben nincs semmi rossz tökéletesen működik.
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!