Problem mit Array zuweisung
Verfasst: Do Okt 15, 2009 4:42 pm
...beim zuweisen der geparsten(= Quoting und Variablenvorzeichen entfernen) Strings ins argv Array, was einfach nicht klappen will(siehe z.b. arg[arga] = qstring;). Ich find den Fehler einfach nicht....
Die Funktion soll Quotes entfernen, und Variablen heraussuchen, daher
$var = "Text 123"
soll im arg array so herauskommen:
{ "var", "=", "Text 123" }
und im array argt(Definition, was was ist, damit z.b. Variablen von einer anderen Funktion ausgelesen werden können)
{ 1,2,0}
Die Funktion ist übrigends nur auf meine Test-Weise programmiert (= einfach drauf los, um zu testen).
Die Funktion soll Quotes entfernen, und Variablen heraussuchen, daher
$var = "Text 123"
soll im arg array so herauskommen:
{ "var", "=", "Text 123" }
und im array argt(Definition, was was ist, damit z.b. Variablen von einer anderen Funktion ausgelesen werden können)
{ 1,2,0}
Code: Alles auswählen
int parse_cmd(char *cmd) {
//int len = strlen(cmd);
int quote = 0;
int var = 0;
int i = 0;
int j = 0;
int arga = 0;
int args = 0;
char qstring[200];
char ostring[200];
char *arg[200];
int argt[200];
if(!cmd) return -1;
while(*cmd != 0) {
if(quote == 1) {
if((*cmd == '"') || (*cmd == '\'')) {
quote = 0;
qstring[i] = '\0';
args = 1;
argt[arga] = 0;
printf("Quote: %s;\n",qstring);
}
else {
qstring[i] = *cmd;
i++;
}
}
else if(var == 1) {
if(*cmd == ' ') {
var = 0;
qstring[i] = '\0';
args = 1;
argt[arga] = 1;
printf("Var: %s;\n",qstring);
}
else {
qstring[i] = *cmd;
i++;
}
}
else if(((*cmd == '"') || (*cmd == '\'')) && quote == 0) { /
quote = 1;
}
else if((*cmd == '$') && var == 0) {
var = 1;
}
else {
if(*cmd != ' ') {
ostring[j] = *cmd;
j++;
}
else {
ostring[j] = '\0';
printf("Other: %s\n",ostring);
j = 0;
arg[arga] = ostring;
argt[arga] = 2;
arga++;
ostring[0] = '\0';
}
}
if(args == 1) {
args = 0;
arg[arga] = qstring;
qstring[0] = '\0';
i = 0;
arga++;
}
cmd++;
}
char msg[200];
printf("arg: %s argo: %d\n",arg[0], arga);
if(var == 1) {
sprintf(msg,"%s line: %d unexpected token \"$\"\n", fname, line);
sys_error(msg);
return -1;
}
if(quote == 1) {
sprintf(msg,"%s line: %d expecting end of quote\n", fname, line);
sys_error(msg);
return -1;
}