我认为这将是非常基本的东西。我的 C/C++ 已经生锈了.. 14 多年前就用过它了.. 从那时起就一直用 Perl、Shell 和 Python 进行编码,并且在 C 代码中遇到了一个令人沮丧的问题:
我在 argv[7] 中有一个类似于下面的字符串:
最小值:最大值:两者:两者
我想使用冒号将其分解并将其存储到数组中。然后我想访问数组的某个元素,将其传递给字符串 var 并将其传递给几个函数。我的问题是定义字符串数组,然后跨函数传递字符串,这是非常基本的东西脚本语言
我正在做这样的事情:
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] 为 NULL 然后我尝试将其分配并传递为:
请帮助我缺少什么。我搜索了许多 C/C++ 帮助网站,但无法找到基本的内容。
最佳答案
在 char *y = (char*)malloc(20*sizeof(char))
,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;
}
关于c - 如何在 C 中拆分字符串、存储在数组中并传递几个函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47573355/