Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien
Toon posts:

[C++] cin >> const char * werkt niet

Pagina: 1
Acties:
  • 587 views sinds 30-01-2008

Verwijderd

Topicstarter
Hallo allemaal!

Ik heb een probleempje.
Ik heb een const char * variabele gemaakt, maar deze kan ik niet met cin >> gebruiken want dan krijg ik een error :'( .

Ik gebruik Visual C++ 2008 compiler en gebruikt geen clr.

Hier is de code:
C++:
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
using namespace std;

int main()
{
    const char * chr_name;
    cout << "Please enter your name:" << endl;
    cin >> chr_name;
    cout << chr_name;
    system("pause");
    return 0;
}

En hier is wat ik krijg bij output:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
------ Build started: Project: entername, Configuration: Debug Win32 ------
Compiling...
main.cpp
c:\documents and settings\admin\bureaublad\c++\entername\entername\main.cpp(8) : error C2679: binary '>>' : no operator found which takes a right-hand operand of type 'const char *' (or there is no acceptable conversion)
        c:\program files\microsoft visual studio 9.0\vc\include\istream(1144): could be 'std::basic_istream<_Elem,_Traits> &std::operator >><std::char_traits<char>>(std::basic_istream<_Elem,_Traits> &,signed char *)'
        with
        [
            _Elem=char,
            _Traits=std::char_traits<char>
        ]
        c:\program files\microsoft visual studio 9.0\vc\include\istream(1146): or       'std::basic_istream<_Elem,_Traits> &std::operator >><std::char_traits<char>>(std::basic_istream<_Elem,_Traits> &,signed char &)'
        with
        [
            _Elem=char,
            _Traits=std::char_traits<char>
        ]
        c:\program files\microsoft visual studio 9.0\vc\include\istream(1148): or       'std::basic_istream<_Elem,_Traits> &std::operator >><std::char_traits<char>>(std::basic_istream<_Elem,_Traits> &,unsigned char *)'
        with
        [
            _Elem=char,
            _Traits=std::char_traits<char>
        ]
        c:\program files\microsoft visual studio 9.0\vc\include\istream(1150): or       'std::basic_istream<_Elem,_Traits> &std::operator >><std::char_traits<char>>(std::basic_istream<_Elem,_Traits> &,unsigned char &)'
        with
        [
            _Elem=char,
            _Traits=std::char_traits<char>
        ]
        c:\program files\microsoft visual studio 9.0\vc\include\istream(155): or       'std::basic_istream<_Elem,_Traits> &std::basic_istream<_Elem,_Traits>::operator >>(std::basic_istream<_Elem,_Traits> &(__cdecl *)(std::basic_istream<_Elem,_Traits> &))'
        with
        [
            _Elem=char,
            _Traits=std::char_traits<char>
        ]
        c:\program files\microsoft visual studio 9.0\vc\include\istream(161): or       'std::basic_istream<_Elem,_Traits> &std::basic_istream<_Elem,_Traits>::operator >>(std::basic_ios<_Elem,_Traits> &(__cdecl *)(std::basic_ios<_Elem,_Traits> &))'
        with
        [
            _Elem=char,
            _Traits=std::char_traits<char>
        ]
        c:\program files\microsoft visual studio 9.0\vc\include\istream(168): or       'std::basic_istream<_Elem,_Traits> &std::basic_istream<_Elem,_Traits>::operator >>(std::ios_base &(__cdecl *)(std::ios_base &))'
        with
        [
            _Elem=char,
            _Traits=std::char_traits<char>
        ]
        c:\program files\microsoft visual studio 9.0\vc\include\istream(175): or       'std::basic_istream<_Elem,_Traits> &std::basic_istream<_Elem,_Traits>::operator >>(std::_Bool &)'
        with
        [
            _Elem=char,
            _Traits=std::char_traits<char>
        ]
        c:\program files\microsoft visual studio 9.0\vc\include\istream(194): or       'std::basic_istream<_Elem,_Traits> &std::basic_istream<_Elem,_Traits>::operator >>(short &)'
        with
        [
            _Elem=char,
            _Traits=std::char_traits<char>
        ]
        c:\program files\microsoft visual studio 9.0\vc\include\istream(228): or       'std::basic_istream<_Elem,_Traits> &std::basic_istream<_Elem,_Traits>::operator >>(unsigned short &)'
        with
        [
            _Elem=char,
            _Traits=std::char_traits<char>
        ]
        c:\program files\microsoft visual studio 9.0\vc\include\istream(247): or       'std::basic_istream<_Elem,_Traits> &std::basic_istream<_Elem,_Traits>::operator >>(int &)'
        with
        [
            _Elem=char,
            _Traits=std::char_traits<char>
        ]
        c:\program files\microsoft visual studio 9.0\vc\include\istream(273): or       'std::basic_istream<_Elem,_Traits> &std::basic_istream<_Elem,_Traits>::operator >>(unsigned int &)'
        with
        [
            _Elem=char,
            _Traits=std::char_traits<char>
        ]
        c:\program files\microsoft visual studio 9.0\vc\include\istream(291): or       'std::basic_istream<_Elem,_Traits> &std::basic_istream<_Elem,_Traits>::operator >>(long &)'
        with
        [
            _Elem=char,
            _Traits=std::char_traits<char>
        ]
        c:\program files\microsoft visual studio 9.0\vc\include\istream(309): or       'std::basic_istream<_Elem,_Traits> &std::basic_istream<_Elem,_Traits>::operator >>(__w64 unsigned long &)'
        with
        [
            _Elem=char,
            _Traits=std::char_traits<char>
        ]
        c:\program files\microsoft visual studio 9.0\vc\include\istream(329): or       'std::basic_istream<_Elem,_Traits> &std::basic_istream<_Elem,_Traits>::operator >>(__int64 &)'
        with
        [
            _Elem=char,
            _Traits=std::char_traits<char>
        ]
        c:\program files\microsoft visual studio 9.0\vc\include\istream(348): or       'std::basic_istream<_Elem,_Traits> &std::basic_istream<_Elem,_Traits>::operator >>(unsigned __int64 &)'
        with
        [
            _Elem=char,
            _Traits=std::char_traits<char>
        ]
        c:\program files\microsoft visual studio 9.0\vc\include\istream(367): or       'std::basic_istream<_Elem,_Traits> &std::basic_istream<_Elem,_Traits>::operator >>(float &)'
        with
        [
            _Elem=char,
            _Traits=std::char_traits<char>
        ]
        c:\program files\microsoft visual studio 9.0\vc\include\istream(386): or       'std::basic_istream<_Elem,_Traits> &std::basic_istream<_Elem,_Traits>::operator >>(double &)'
        with
        [
            _Elem=char,
            _Traits=std::char_traits<char>
        ]
        c:\program files\microsoft visual studio 9.0\vc\include\istream(404): or       'std::basic_istream<_Elem,_Traits> &std::basic_istream<_Elem,_Traits>::operator >>(long double &)'
        with
        [
            _Elem=char,
            _Traits=std::char_traits<char>
        ]
        c:\program files\microsoft visual studio 9.0\vc\include\istream(422): or       'std::basic_istream<_Elem,_Traits> &std::basic_istream<_Elem,_Traits>::operator >>(void *&)'
        with
        [
            _Elem=char,
            _Traits=std::char_traits<char>
        ]
        c:\program files\microsoft visual studio 9.0\vc\include\istream(441): or       'std::basic_istream<_Elem,_Traits> &std::basic_istream<_Elem,_Traits>::operator >>(std::basic_streambuf<_Elem,_Traits> *)'
        with
        [
            _Elem=char,
            _Traits=std::char_traits<char>
        ]
        while trying to match the argument list '(std::istream, const char *)'
Build log was saved at "file://c:\Documents and Settings\admin\Bureaublad\C++\entername\entername\Debug\BuildLog.htm"
entername - 1 error(s), 0 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

Ik snap niet wat ik fout heb gedaan :?.
Kan iemand me helpen?
Alvast bedankt.

  • DrEvil1986
  • Registratie: Januari 2003
  • Laatst online: 16-11 20:30
C++ laat je niet rommelen met const waarden. Dat is het hele idee van const, voorkomen dat verderop in de code nog iets wordt veranderd aan de waarde
Deze moet je meteen initaliseren, en daarna read only gebruiken.

Wat je wel kan doen is bijvoorbeeld:

een char x definieren,
cin >> char x
const char y * = &char x

nu de const* char y blijven gebruiken.

[ Voor 58% gewijzigd door DrEvil1986 op 09-01-2008 16:35 . Reden: uitbreiding informatie ]


Verwijderd

Topicstarter
Ik weet het al.
Inplaats van const char * chr_name moet ik char chr_name[10000/*of een ander groot getal*/] gebruiken:
C++:
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
using namespace std;

int main()
{
    char chr_name[10000/*of een ander groot getal*/];
    cout << "Please enter your name:" << endl;
    cin >> chr_name;
    cout << chr_name;
    system("pause");
    return 0;
}

[ Voor 7% gewijzigd door Verwijderd op 09-01-2008 16:43 ]


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 06-09 00:37

curry684

left part of the evil twins

En wat nu als een of andere Welsh royal langskomt met een naam van 10100 karakters?

Professionele website nodig?


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 11:17

.oisyn

Moderator Devschuur®

Demotivational Speaker

Exact. Gebruik dus gewoon std::string. En tevens std::getline(), zodat hij niet stopt met inlezen bij de eerste spatie.

[ Voor 51% gewijzigd door .oisyn op 09-01-2008 16:59 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Verwijderd

Topicstarter
curry684 schreef op woensdag 09 januari 2008 @ 16:57:
En wat nu als een of andere Welsh royal langskomt met een naam van 10100 karakters?
dan heeft ie pech

[ Voor 85% gewijzigd door Verwijderd op 09-01-2008 17:00 ]


Verwijderd

er kan een exception ontstaan in je programma ;) hou er dus maar rekening mee

  • Creepy
  • Registratie: Juni 2001
  • Nu online

Creepy

Tactical Espionage Splatterer

:X

Dat meen je niet. Heb je enig idee wat een buffer overflow is en wat je daar precies mee kan doen? Dit *is* een buffer overflow waiting to happen... in dit geval misschien niet zo erg, in andere gevallen genoeg om je machine compleet gehacked te krijgen of plat te laten krijgen....

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Verwijderd

Topicstarter
.oisyn schreef op woensdag 09 januari 2008 @ 16:59:
Exact. Gebruik dus gewoon std::string. En tevens std::getline(), zodat hij niet stopt met inlezen bij de eerste spatie.
dan krijg ik een error

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Dan moet je je maar wat meer verdiepen in de materie en/of documentatie.

Kom op zeg, als je al te lam bent om zelf aan te geven wat je er dan van gemaakt hebt, of wat wélke error je dan krijgt dan hoeft dit topic van mij ook niet meer. Zeker niet met je kortaffe reacties tot nu toe.

Hier wat relevante linkjes voor je:
Programming Beleid Quickstart
quickfix



Nog een laatste reactie van curry684 die op de valreep achter dit slotje kwam:
Nee dan heeft ie een buffer overflow waarmee ie random data in jouw process stack kan injecten om op die manier arbitrary code onder jouw credentials uit te voeren met privilege escalation.

Maar gezien je manier van antwoorden heb geen enkele interesse in inhoudelijke opmerkingen waar je iets van zou kunnen leren, dus pruts maar lekker verder.

[ Voor 84% gewijzigd door RobIII op 09-01-2008 17:14 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • whoami
  • Registratie: December 2000
  • Laatst online: 15:10
Nou, dan krijg je een error ...

Op deze manier kunnen we je zeker helpen. Mag ik je vragen om eens de PRG Quickstart door te lezen ?
We kunnen nl. niet ruiken wat jij te zien krijgt, en we verwachten ook wel een beetje meer zelfwerkzaamheid van de topicstarter. (In dit geval, u dus, mocht dit nog niet duidelijk zijn)...

En, bij het lezen van dit topic moet ik ook wel eens de :X gebruiken ....
:X

https://fgheysels.github.io/

Pagina: 1

Dit topic is gesloten.