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;
	}	