在检索到令牌后获取剩余的String

时间:2014-12-28 08:50:17

标签: c string token getline

假设我有以下功能:

void readcmd(char* cmd, char* params) {
  char* input;
  size_t size = 0;
  char* sep = "\t\v\r\f\n\b "; // separator

  getline(&input, &size, stdin);
  cmd = strtok(input, sep);
}

我的意见是:

我喜欢Stackoverflow!

在上面的代码中,我已将程序存储在 cmd 数组中的第一个令牌中。我希望句子的其余部分存储在params数组中;因此:

cmd:

params:就像Stackoverflow一样!

我怎样才能做到这一点?

谢谢

1 个答案:

答案 0 :(得分:0)

处理完评论后,更完整的例子:

#include <stdlib.h>
#include <stdio.h>
#include <string.h>

void readcmd(char** cmd, char** params) {
  char* input = 0;
  size_t size = 0;
  char* sep = "\t\v\r\f\n\b "; // separator

  if (getline(&input, &size, stdin) < 0) {
    printf("failed to read a line\n");
    exit(-1);
  }

  *cmd = strtok(input, sep);

  if (*cmd) {
    *cmd = strdup(*cmd);
    *params = strdup(input + strlen(input) + 1);
  }
  free(input);
}

int main(int argc, char** argv) {
  char *cmd = 0;
  char *params = 0;

  readcmd(&cmd, &params);

  if (cmd) {
    printf("cmd: %s\n", cmd);
    free(cmd);
  }
  if (params) {
    printf("params: %s\n", params);
    free(params);
  }

  return 0;
}