入力の 80 文字の行を、各要素が文字列を指す配列に分割しようとしています。基本的に、「Hello world!」のように char a[80] を変換します。char* b[64] に変換します。ここで、b[0] は「Hello」を指し、b[1] は「world!」を指します。
基本的に、 strsep() で次のコードが可能になるものは次のとおりです。
while((cmd->argv[argc++] = strsep(clPtr, WHITESPACE)) != NULL);
このコードを変更する方法を知りたいです。
int parse(char* comm, char** commarray) {
int count = 0;
char word[80] = "";
char ch[2] = {' ', '\0'};
if(strlen(comm) == 0) {
commarray[0] = "NULL";
return 0;
}
for(size_t i = 0; i < strlen(comm); i++) {
int c = int(comm[i]);
if(!isspace(c)) {
ch[0] = comm[i];
strcat(word, ch);
if(i == (strlen(comm) - 1)) {
commarray[count] = word;
cout << commarray[count] << endl;
count++;
}
}
else if(isspace(c) && word != "") {
commarray[count] = word;
cout << commarray[count] << endl;
word[0] = '\0';
count++;
}
}
return 1;
}
//main
int main() {
char command[80];
char* args[64];
while(true) {
cout << "order>";
cin.getline(command, 80);
if(strcmp(command, "quit") == 0 || strcmp(command, "exit") == 0) {
break;
}
parse(command, args);
cout << args[0] << endl;
if(strcmp(args[0], "quit") == 0 || strcmp(args[0], "exit") == 0) {
break;
}
/*for(int i = 0; i < 3; i++) {
cout << args[i] << endl;
}*/
}
return 0;
}
main() の変数 args は、parse() での変数 commaray の動作を表示しません。代わりに、私は意味不明になります。どうしてこれなの?配列を渡すことは、デフォルトでは参照渡しだと思いましたか? Commarray の場合、文字列へのポインタの適切な配列を取得します (と思います)。引数については、使用できるものは何もありません。