Avatar billede narrr Nybegynder
04. april 2003 - 15:54 Der er 3 kommentarer og
1 løsning

char[1]

Hvordan kan det være, at følgende kode virker fint, selvom man skriver mange tegn?
--
char hej[1];
cin>>hej;
cout << hej << endl;
--
Avatar billede arne_v Ekspert
04. april 2003 - 15:57 #1
Den virker vel heller ikke fint.

Du overskriver de bytes det ligger efter hej.

Og med en vis sandsynelighed vil programmet crashe.
Avatar billede arne_v Ekspert
04. april 2003 - 16:02 #2
Eksempel:

#include <iostream>

using namespace std;

int main()
{
  int hej2;
  char hej[2];
  hej2 = 123;
  cin>>hej;
  cout << hej << endl;
  cout << hej2 << endl;
}

med Mingw32 3.1 virker det som følger:

C:\>zzzz
a
a
123

C:\>zzzz
bb
bb
0

C:\>zzzz
ccc
ccc
99
a+nul byte er OK

bb+nul byte er for stor og overskriver hej2 med nu byten.

ccc+nul byte er for stor og overskriver hej2 med værdien af lille C (99)
Avatar billede arne_v Ekspert
04. april 2003 - 16:03 #3
Bemærk at den eksakte opførsel er ekstrem compiler og
platform specifik.

Men det kan under alle omstændigheder korrumpere data.
Avatar billede narrr Nybegynder
07. april 2003 - 17:25 #4
Okay
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester