Iは、スクリプトに渡された引数からスクリプトに渡された引数から符号なし整数配列を作成する方法は?
char** str_split(char* a_str, const char a_delim)
{
char** result = 0;
size_t count = 0;
char* tmp = a_str;
char* last_comma = 0;
char delim[2];
delim[0] = a_delim;
delim[1] = 0;
/* Count how many elements will be extracted. */
while (*tmp)
{
if (a_delim == *tmp)
{
count++;
last_comma = tmp;
}
tmp++;
}
/* Add space for trailing token. */
count += last_comma < (a_str + strlen(a_str) - 1);
/* Add space for terminating null string so caller
knows where the list of returned strings ends. */
count++;
result = malloc(sizeof(char*) * count);
if (result)
{
size_t idx = 0;
char* token = strtok(a_str, delim);
while (token)
{
assert(idx < count);
*(result + idx++) = strdup(token);
token = strtok(0, delim);
}
assert(idx == count - 1);
*(result + idx) = 0;
}
return result;
}
uint8_t in[] = {0X08,0X3c,0Xe6,0Xe3,0Xb9,0X74,0X4a,0Xdc,0Xd7,0X29,0Xee,0X99,0X35,0X15,0X8a,0X77};
ような符号なし整数の配列を作成する必要があります。引数は
./conversion 0X08,0X3c,0Xe6,0Xe3,0Xb9,0X74,0X4a,0Xdc,0Xd7,0X29,0Xee,0X99,0X35,0X15,0X8a,0X77
ようなスクリプトに渡されますが、私は私がスクリプトを実行したときに、私は次の警告を取得しています
char** tokens;
tokens = str_split(argv[1], ',');
uint8_t hex[100];
uint8_t in[100];
if (tokens)
{
int i;
for (i = 0; *(tokens + i); i++)
{
printf("val=[%s]\n", *(tokens + i));
in[i] = *(tokens + i);
free(*(tokens + i));
}
printf("\n");
free(tokens);
}
for (i = 0; i < 16;i++)
printf("%02x ",in[i]);
引数から配列を作成するには、次のコードを作成し
warning: assignment makes integer from pointer without a cast
しかし、私は各値を印刷することができます
printf("val=[%s]\n", *(tokens + i))
これを配列として保存することはできません
コードに間違いがありますか?手伝っていただけませんか ?
ご返信いただきありがとうございます。そのような配列を生成する方法はありますか? –
さらに良くなるのは[mcve]でしょう。あなたの 'str_split'メソッドが欠けているので、もし誰かが自分のために働くコードを再現したいのであれば、それはできません。 –
彼は私が見ることができるfree() 'dポインタを再利用しません。彼はchar **トークンではなく、char *トークンを自由にします。私はfree()の後で反復されるので、別のポインタです。 – torstenvl