我试图将输入参数按“,”字符串分割后的 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/