Ich versuche, eine analexical Validierung abzuschließen, aber ich einige Probleme mit Zeigern konfrontiert, dies ist mein CodeProbleme verwenden Zeiger innerhalb eines Compilers
case 6: c = next_carac(file);
for(handle=0;(words[handle] != "NULL");handle++)
{
strcpy(message, words[handle]);
if(!strcmp(token,message))
strcpy(message, "words");
}
if(isdigit(c) && strcmp(message,"words"))
{
step=6;
token[auxtoken]=c;
auxtoken++;
}
else if(isalpha(c) && strcmp(message,"words"))
{
step=6;
token[auxtoken]=c;
auxtoken++;
}
else
{
step=7;
return_carac(file);
}
break;
und diese sind die Variable deklariert
const char *words[]={
"program",
"label",
"integer",
"word",
"char",
"byte",
"shortint",
"logint",
"real",
"single",
"double",
"string",
"boolean",
"var",
"procedure",
"function",
"begin",
"end",
"if",
"then",
"else",
"or",
"and",
"div",
"not",
"do",
"while",
"mod",
"NULL"
};
char token[80],message[30];
int step=0;
char c;
auxtoken=0;
aber es erzeugt die folgenden Fehler, die ich nicht einen Weg finden könnte
Loaded ‚ntdll.dll‘ keine passenden symbolischen Angaben zu mildern. Geladen "C: \ WINDOWS \ system32 \ kernel32.dll", keine übereinstimmenden symbolischen Informationen gefunden. Erste-Chance-Ausnahme in Main.exe: 0xC0000005: Zugriffsverletzung.
Würdest du wissen, wie ich es beheben könnte?
Die Bedingung Wörter [Handle]! = "NULL" ist nicht immer wahr. Tatsächlich werden String-Literale oft nur einmal in einer ausführbaren Datei gespeichert. In diesem Fall verhält sich der Code genauso, als würde man die Vorkommen von "NULL" durch NULL ersetzen. – mweerden
Technisch gesehen hast du recht - es ist nicht immer so. Aber für VC++ (das ist, was ich denke, OP verwendet) müssen Sie diese Funktion explizit aktivieren, es ist nicht standardmäßig aktiviert. Also, ich bin mir ziemlich sicher, dass dies der Grund für das Problem ist. Ich korrigiere trotzdem meine Antwort, danke! –