webForumDet fria alternativet

char * test

9 svar · 469 visningar · startad av tosses

tossesMedlem sedan aug. 2003190 inlägg
#1

Hej!

Kan någon vänlig själ förklara enkelt hur egentligen char * test fungerar?

Tack!

GaqziMedlem sedan aug. 2002224 inlägg
#2

pekare till char namnged test?
Vet inte :P

PeWMedlem sedan juni 200010 432 inlägg
#3

Det är en deklaration av en pekare till en adress (ej definierad) i minnet. Då det är av typen char som deklareras så blir storleken för aritmetiken 1 byte. Hade det varit en int *, skulle storleken för aritmetiken vara 4 bytes. (Med aritmetiken avser jag hur kompilatorn i senare kod behandlar pekaren. Vidare kan storlekarna på typerna variera beroende på plattform)

tossesMedlem sedan aug. 2003190 inlägg
#4

Så om jag fattar rätt så anges ett minnseutrymme på 1 byte för variabeln test av typen char.
Håller c koll på så att inte andra variabler osv skriver över minnesutrymmet?
Och vad händer i fall man gör så här:

char * test = "";
cout<<"Skriv massor!: ";
cin>>test;
ViktorMedlem sedan aug. 20021 752 inlägg
#5

I C/C++ får du aldrig hjälp med att hålla koll på om någon skriver i ditt minnes område.
Jag vet inte exakt vad som händer i ditt exempel, men jag antar att test kommer att bli 1 byte stor så du kommer bara att kunna skriva in en byte, men eftersom detta är C++ så kommer du utan problem att kunna skriva in ännu fler men då finns ju självklart risken att du skriver över annat minne som är allokerat av andra variabler.

När du arbetar med pekare så använder du new/delete för att skapa utrymme och frigöra utrymme för dem.

/Viktor

tossesMedlem sedan aug. 2003190 inlägg
#6

I mitt förra exempel så krachar programmet.
Och antagligen är det det du nämner angående risken att skriva över osv..

PeWMedlem sedan juni 200010 432 inlägg
#7

Det är stacken som skrivs över i ditt exempel. Det är dock inte alltid man har sån tur att programmet kraschar utan felet kanske inte uppdagas förräns i speciella situationer. Det är då man är kompis med debuggern... men ivf så måste man vara nogrann med pekare så slipper man överraskningar.

GunnarDMedlem sedan juni 20014 290 inlägg
#8

Om man skall vara nog! :)

PeW skrev:

Då det är av typen char som deklareras så blir storleken för aritmetiken 1 byte. Hade det varit en int *, skulle storleken för aritmetiken vara 4 bytes.

Storleken för aritmetiken för char är sizeof(char), motsvarande för int är sizeof(int).

Kan vara bra att hålla detta i minnet speciellt om man börjar hantera 2bytes char (WCHAR i windows) och Unicode.

tossesMedlem sedan aug. 2003190 inlägg
#9

tack för alla svar !! Jag kan tyvärr inte klicka i Acceptera som slutgiltigt svar eftersom jag accepterar allt som slutgiltiga svar:)

PeWMedlem sedan juni 200010 432 inlägg
#10

Acceptera det du nyss skrev själv då ;)

132 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
130 ms — hämta tråd, inlägg och bilagor (db)