将字符分割成字符指针数组

Splitting chars into array of char pointers

本文关键字:字符 数组 指针 分割      更新时间:2023-10-16

我试图将一行80个字符的输入分割成一个数组,其中每个元素指向一串字符。本质上,将字符a[80]转换为字符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] = {' ', ''};
  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] = '';
      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()中变量comma所显示的内容。相反,我得到的是胡言乱语。为什么会这样?我认为传递数组是默认的通过引用传递?对于commarray,我得到适当的指向字符串的指针数组(我认为)。对于args,我没有得到任何可用的

指针地狱就是你所在的地方。我可以看到至少有两个基本的问题,但可能还有更多。

1)你在所有的作业中重复使用单词来进行比较。最后,所有的指针都指向同一个单词数组。显然这行不通。

2)当您退出解析函数时,单词数组不再在作用域中,因此它成为无效内存。因此,所有的args数组指针都指向同一块无效(因此是垃圾)内存。

我的建议,停止使用指针,开始使用c++,即std::string类,它的行为将比任何指针更合乎逻辑和直观。