我試圖將一行80個字符的輸入分成一個數組,其中每個元素指向一個字符串。本質上,把一個char [80]變成「Hello world!」轉換爲char * b [64],其中b [0]指向「Hello」,b [1]指向「world!」將字符分成char指針數組
基本上,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;
}
變量ARGS中main()不顯示變量commarray在parse()中的作用。相反,我得到的是胡言亂語。爲什麼是這樣?我認爲傳遞數組默認情況下是通過引用傳遞的?對於commarray,我得到適當的字符串指針數組(我認爲)。對於參數,我沒有任何可用的東西。
1)實際上,commarray中的每個指針指向一個不同的單詞。 commarray得到我需要的東西。參數不。 2)這很有意義。所以我應該讓commarray指向我傳遞的部分? 我實際上已經有了可用的代碼將一個字符串拆分成一個字符串向量。我應該把所有這些東西都傳遞給execv,但是,這顯然需要一堆char指針。 – KingTouchstone
@KingTouchstone然後做分割使用std ::字符串,當你完成分割,將std :: string轉換爲字符指針。 – john
是的,我想我會這麼做。我希望避免這種情況,但由於我並不在意表現,所以我說得對。 我真的很感謝你的幫助! – KingTouchstone