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