webForumDet fria alternativet

Felaktigt felmeddelande?

C/C++

7 svar · 948 visningar · startad av SilvioF

Medlem sedan juni 2000547 inlägg
Frågan#1

Jag har följande kod:

char* wordGuess;
cin >> wordGuess; // Låt användaren skriva in ett ord.

Detta ger vid kompilering inget felmeddelande, men när jag försöker köar applikationen, får jag felmeddelandet Run-Time Check Failure #3 - The variable 'wordGuess' is being used without being initialized..
Men som ni kan se så har jag tydligt deklarerat variabeln wordGuess på raden ovanför.

Någon som har något tips om vad som är fel?

Jag använder variablen i ett anrop till en funktion senare i koden, men det skall inte spela någon roll tycker jag.

Medlem sedan juni 2000547 inlägg
#2

Meh.. Hittade "felet".

Det vara bara att skriva

char* wordGuess = "";

Detta löste problemet.
Jag tycker det var lite löjligt eftersom, enlgit mig, variabeln blir tom när jag deklarerar den (eller har jag fel?).

Medlem sedan juni 20014 290 inlägg
#3

Fortfarande fel! :)

char* wordGuess;

Är en pekare till en sträng. Men den pekar ingenstans.

Med koden:

char* wordGuess = "";

Så pekar pekaren på en tom sträng som bara har plats för den tomma strängen. Sedan skriver du in en större sträng som inte får plats utan skriver över det som kommer efter.

Jag skulle nog skrivit det så här:

#include <iostream.h>
#include <string>

string wordGuess;
cin >> wordGuess;

/red: Fixat så att sista exemplet stämmer.

Medlem sedan juni 2000547 inlägg
#4

GunnarD skrev:

Fortfarande fel! :)

char* wordGuess;

Är en pekare till en sträng. Men den pekar ingenstans.

Fel!
Läs gärna min post en gång till så ser du att jag faktiskt nämner att den pekar på något i ett senare skede i koden, men den koden får du inte se.

Medlem sedan mars 20007 896 inlägg
#5

SilvioF skrev:

Fel!
Läs gärna min post en gång till så ser du att jag faktiskt nämner att den pekar på något i ett senare skede i koden, men den koden får du inte se.

Nej, du har faktiskt fel. Du deklarerar wordGuess, men du initialiserar den aldrig (enl. ditt första inlägg). Däremot initialiserar du den när du pekar den mot en tom sträng. Det gör dock inte att GunnarD har fel! Det spelar ingen roll om du skickar med den till en funktion vid ett senare tillfälle. Följ GunnarDs råd och använd typen 'string' för att lagra strängar istället, det underlättar ditt arbete.

Medlem sedan juni 2000547 inlägg
#6

Aah ok.. DÅ ber jag om ursäkt. Är rätt ny på C++ och kommer från VB-världen där allt är så fruktansvärt förenklat. :(

Medlem sedan juni 20014 290 inlägg
#7

SilvioF skrev:

Aah ok.. DÅ ber jag om ursäkt. Är rätt ny på C++ och kommer från VB-världen där allt är så fruktansvärt förenklat. :(

Det är ett klassiskt fel om man är ny på c/c++.

Läs gärna på hur pekare, referenser och variabler fungerar och skillnaden mellan dom, det underlättar mycket för framtida felsökning. :)

Medlem sedan juni 2000547 inlägg
#8

Det blev en hänga gubbe applikation.
Tydligen lyckades jag så bra att jag fick MVG på det också (går programmering A+B+C för att komplettera gymnasiebetygen med något mer än grundämnen). :D

249 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
122 ms — deklarationer (db)
0 ms — hämta statistik (cache)
123 ms — hämta tråd, inlägg och bilagor (db)
123 ms — ändringar (db)