C中带有字符**argv的strtok()

C中带有字符**argv的strtok(),c,strtok,C,Strtok,我有一个项目,我需要使用当有人调用这个程序时传递的参数。条件是令牌分隔符为“”,我无法执行此操作 我用strcpy试过了,但是所有的“”都消失了。现在我尝试使用memcpy,但是当我打印代币时,我得到了一些奇怪的字符。注意,我不需要打印它们,我只想知道我手中是否有正确的东西,以便我可以对这些信息进行处理 int main(int argc, char** argv){ const char symb = (char)2; char *comm; char* offset = comm

我有一个项目,我需要使用当有人调用这个程序时传递的参数。条件是令牌分隔符为“”,我无法执行此操作

我用strcpy试过了,但是所有的“”都消失了。现在我尝试使用memcpy,但是当我打印代币时,我得到了一些奇怪的字符。注意,我不需要打印它们,我只想知道我手中是否有正确的东西,以便我可以对这些信息进行处理

int main(int argc, char** argv){
  const char symb = (char)2;
  char *comm;
  char* offset = comm;
  int i;
  //put all args together
  for(i = 1; i< argc; i++){
    memcpy(offset, argv[i], strlen(argv[i]));
    offset+=strlen(argv[i]);
  }    
  char *token;
  token = strtok(comm, &symb);
  while(token != NULL){
    printf("\n%s\n", token);//debugging
    //do stuff with args
    token = strtok(NULL, &symb);
  }
 return 0;
}
我想用tup1做op,tup2是最好的,tup3是最好的 所以我需要在argv将其分离后将其全部集合起来,然后使用“”分隔符获取标记。但是,当我使用printf进行调试时,我得到以下结果:

$n�Y
$n@
$n �k
$n�Y
$n�Y
$n�Y
$nY
$n l
$Segmentation fault (core dumped)

我做错了什么?

您没有将内存分配给char*comm;寻找引用。你的程序没有看到引号,它们被你的shell解释和删除。你的shell正在吃引号。试试$./prog op\tup1\\tup2是最好的\\tup3\替代。你必须跳过BASH中的引号,因为它使用它们来将带有空格的项组化为单个参数。还要注意,Strtok修改作为第一个参数传递的字符串,因此不能用于常量或只读字符串,并且应该始终考虑以ARGV作为只读的字符串。是的,我已经这样做了。问题解决了!!:D@Jasonco
$n�Y
$n@
$n �k
$n�Y
$n�Y
$n�Y
$nY
$n l
$Segmentation fault (core dumped)