#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct {
char **args; /* An array of strings*/
} asmInstruction;
int countTokens(char *charLine){
return 3;//mock
}
asmInstruction *tokenizeLine(char *charLine) {
int words = countTokens(charLine);
char *tokens;
asmInstruction
*instr
= (asmInstruction
*) malloc(sizeof(asmInstruction
)); instr
->args
= (char**) malloc((words
+1) * sizeof(char*));//+1 for NULL, or add member E.g instr->numOfWords = words
int count = 0;
tokens
= strtok(charLine
, " ,"); while (tokens) {
strcpy(instr
->args
[count
++], tokens
); }
instr->args[count] = NULL;
return instr;
}
int main(void) {
char s[] = "ldr r2,r1";
asmInstruction *instr = tokenizeLine(s);
//test print
for(int i=0; instr->args[i]; ++i)
printf("%s\n", instr
->args
[i
]); //...
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPHN0cmluZy5oPgoKdHlwZWRlZiBzdHJ1Y3QgewoJY2hhciAqKmFyZ3M7IC8qIEFuIGFycmF5IG9mIHN0cmluZ3MqLwp9IGFzbUluc3RydWN0aW9uOwoKaW50IGNvdW50VG9rZW5zKGNoYXIgKmNoYXJMaW5lKXsKCXJldHVybiAzOy8vbW9jawp9Cgphc21JbnN0cnVjdGlvbiAqdG9rZW5pemVMaW5lKGNoYXIgKmNoYXJMaW5lKSB7CglpbnQgd29yZHMgPSBjb3VudFRva2VucyhjaGFyTGluZSk7CgljaGFyICp0b2tlbnM7CgoJYXNtSW5zdHJ1Y3Rpb24gKmluc3RyID0gKGFzbUluc3RydWN0aW9uKikgbWFsbG9jKHNpemVvZihhc21JbnN0cnVjdGlvbikpOwoJaW5zdHItPmFyZ3MgPSAoY2hhcioqKSBtYWxsb2MoKHdvcmRzKzEpICogc2l6ZW9mKGNoYXIqKSk7Ly8rMSBmb3IgTlVMTCwgb3IgYWRkIG1lbWJlciBFLmcgaW5zdHItPm51bU9mV29yZHMgPSB3b3JkcwoKCWludCBjb3VudCA9IDA7Cgl0b2tlbnMgPSBzdHJ0b2soY2hhckxpbmUsICIgLCIpOwoJd2hpbGUgKHRva2VucykgewoJCWluc3RyLT5hcmdzW2NvdW50XSA9IG1hbGxvYyhzdHJsZW4odG9rZW5zKSsxKTsKCQlzdHJjcHkoaW5zdHItPmFyZ3NbY291bnQrK10sIHRva2Vucyk7CgkJdG9rZW5zID0gc3RydG9rKE5VTEwsICIgLCIpOwoJfQoJaW5zdHItPmFyZ3NbY291bnRdID0gTlVMTDsKCglyZXR1cm4gaW5zdHI7Cn0KCmludCBtYWluKHZvaWQpIHsKCWNoYXIgc1tdID0gImxkciByMixyMSI7Cglhc21JbnN0cnVjdGlvbiAqaW5zdHIgPSB0b2tlbml6ZUxpbmUocyk7CgkvL3Rlc3QgcHJpbnQKCWZvcihpbnQgaT0wOyBpbnN0ci0+YXJnc1tpXTsgKytpKQoJCXByaW50ZigiJXNcbiIsIGluc3RyLT5hcmdzW2ldKTsKCS8vLi4uCglyZXR1cm4gMDsKfQ==