字符串分割后C char** 到 char[]

标签 c arrays string char

我试图将输入参数按“,”字符串分割后的 char 存储到 char[] 数组中。现在这是我的代码:

int main(int argc, char* argv[])
{
 char *function= NULL;
 //The function is a parameter in the format function_name,par1,par2..
 function=argv[4];
 char** tokens;
 tokens = str_split(function, ',');

 if (tokens)
{
 int i;
 char *function_name;
 char arguments[10];

 for (i = 0; *(tokens + i); i++)
 {
    printf("function=[%s]\n",*(tokens + i));
    if(i==0)
    {
        function_name=*(tokens + i);
        printf("function_name: %s\n",function_name);
    }
    else
    {
       arguments[i-1]=*(tokens + i);
    }
    free(*(tokens + i));
  }

  if(strcmp("PKCS7SignML",function_name))
 {
  const char *pin_number=arguments[0];
  printf("pin: %s\n",pin);
  unsigned long slot_number=atol(arguments[1]);
  printf("slot_number: %lu\n",slot_number);
  const char *szInputFileName=arguments[2];
  printf("szInputFileName: %c\n",szInputFileName);
  const char *szOutputFileName=arguments[3]);
  printf("szOutputFileName: %c\n",szOutputFileName);
  int bInitialize=atoi(arguments[4]);
  printf("bInitialize: %d\n",bInitialize);
 }

但是当我尝试打印 char 值时,这些值是空的。

我该如何解决这个问题?

最佳答案

您正在将 char * 类型的值分配给类型为 char 的数组元素。稍后,您将这些相同的数组元素视为整个 char 数组或指向此类的指针。因此,我最好的猜测是您希望以不同的方式声明参数:

// An array of 10 pointers to char:
char *arguments[10];

此外,在将tokens的每个元素分配给变量或数组成员后,您释放该指针。您需要了解,释放指针与指针的及其指向的内存有关,而不是与存储指针值的变量(如果有)有关。释放这些指针会使它们的所有副本无效,包括您刚刚完成分配的指针。这显然不是您真正想要的,因为您稍后会尝试取消引用这些指针。

关于字符串分割后C char** 到 char[],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39666311/

相关文章:

c - OpenMP |使用相关迭代并行化循环

javascript - 从 JS 数组中删除重复项

javascript - 更改 JavaScript 字符串编码

php - 用 JavaScript 实现 PHP 字符串异或

Java:字符串数组的选择排序

c - 为什么 "strupr"的这个实现不起作用?

c - 如何使用 sscanf 查找字符串中的小写字母

c++ - 使用 c 函数时 C++ 中的命名空间

Python - 使用一维数组中的值作为二维数组的列索引

C++获取数组大小的含义