c - 如何在 C 中拆分字符串、存储在数组中并传递几个函数

标签 c arrays string

我认为这将是非常基本的东西。我的 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/

相关文章:

c - 尝试在 C 中初始化结构体时出错

C *argv[] 和 char 数组[][]

javascript - 在单个循环中将字符串与数组的所有元素进行比较

c - 为什么我的 if 语句从未被评估过?

php - 制作N个字符的字符串

无法将数组分配给结构属性

c - 没有调试符号在 BusyBox 上交叉编译 ARM

java - 使用方法参数查找数组最小值的优雅方法?

php - Laravel 中如何从数组中获取值

C++减少字符串内存使用