如何在C中拆分字符串、存储在数组中以及传递几个函数
我觉得这是很基本的东西。我的C/C++已经生锈了。。14年前就用过了。。从那时起,我一直在用perl、shell和python进行编码,在C代码中遇到了一个令人沮丧的问题: 我在argv[7]中有一个类似下面的字符串: 最小值:最大值:两者:两者 我想用冒号将其拆分并存储到数组中。然后我想访问数组的某个元素,将其传递给字符串变量,并将其传递给几个函数。。我的问题是定义字符串数组,然后在函数间传递字符串,这在脚本语言中是非常基本的东西 我正在做这样的事情:如何在C中拆分字符串、存储在数组中以及传递几个函数,c,arrays,string,C,Arrays,String,我觉得这是很基本的东西。我的C/C++已经生锈了。。14年前就用过了。。从那时起,我一直在用perl、shell和python进行编码,在C代码中遇到了一个令人沮丧的问题: 我在argv[7]中有一个类似下面的字符串: 最小值:最大值:两者:两者 我想用冒号将其拆分并存储到数组中。然后我想访问数组的某个元素,将其传递给字符串变量,并将其传递给几个函数。。我的问题是定义字符串数组,然后在函数间传递字符串,这在脚本语言中是非常基本的东西 我正在做这样的事情: int main(int argc, c
int main(int argc, char ** argv){
int iy = 0;
char * y = (char *)malloc(20*sizeof(char));
char * tky = strtok(argv[7], ":");
do {
sprintf(y[iy],tky);
printf("as string = %s and as array value = %s\n", tky, y[iy]);
//printf("as string = %s \n", tky);
iy++;
} while((tky=strtok(NULL,":"))!=NULL);
int measquant = 3;
char colminmax[20];
for(i=0; i<measquant; i++){
sprintf(colminmax,"%s",y[i]);
testfunction(colminmax);
}
return 0;
}
testfunction (char* dir){
printf("dir is %s",dir);
}
它正在正确打印tky,y[iy]为空
然后我尝试将其分配和传递为:
请帮助我,我错过了什么。我已经搜索了许多C/C++帮助网站,但无法找到基本的内容 在char*y=char*malloc20*sizeofchar中,y充当字符数组。它可以存储长达20字节的字符,包括空字符。但是您的意图是声明一个字符串数组
您必须声明字符串数组,我们称之为arr,并为数组中的每个元素分配内存。然后使用strcpy复制到该元素。也可以使用strdup,如下面的示例所示
您正在访问argv[7],但未检查argc>=7。请注意,命令行参数已作为数组提供
int main(int argc, char ** argv)
{
printf("argc = %d\n", argc);
for(int i = 0; i < argc; i++)
printf("argv[%d] = %s\n", i, argv[i]);
int count = 0;
char **arr = malloc(20 * sizeof(char*));
//commented out for testing
//if(argc < 7) return 0;
//char *token = strtok(argv[7], ":");
//use source instead of argv[7] for testing
char source[] = "Min:Max:Both:Both";
char *token = strtok(source, ":");
while(token)
{
arr[count++] = strdup(token);
token = strtok(NULL, ":");
}
for(int i = 0; i < count; i++)
printf("%s\n", arr[i]);
return 0;
}
14年前是。。。2003? 但是你仍然在写C而不是C++…不管怎么说,请发布重现问题的代码,这些代码片段并没有它们可能的那么有用。重点是strtok是臭名昭著的。这几乎总是最糟糕的。顺便说一句,main的可能副本被指定为返回int类型。y是指向20个字符的指针。您可以使用它来存储单个字符串,最多19个字符。但您似乎将其用作数组或字符串。你应该重新考虑这一部分。我在VS上试过,gcc无法复制你所说的错误。你一定改变了什么,我不知道。谢谢Barmak。它解决了这个问题。我之前犯了一个错误。不,我不小心声明了一个malloc of char而不是char*: