나는 스크립트에 전달되는 인수에서스크립트에 전달 된 인수에서 부호없는 정수 배열을 만드는 방법은 무엇입니까?
uint8_t in[] = {0X08,0X3c,0Xe6,0Xe3,0Xb9,0X74,0X4a,0Xdc,0Xd7,0X29,0Xee,0X99,0X35,0X15,0X8a,0X77};
}
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;
같은 부호없는 정수 배열을 작성해야합니다. 인수가
./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))
그러나 배열로 저장할 수 없습니다.
내 코드에 이상이 있습니까? 저 좀 도와 주 시겠어요 ?
Jean에게 답장을 보내 주셔서 감사합니다. 배열을 생성하는 방법이 있습니까? –
무엇이 더 좋을까요 [mcve]가 될 것입니다. 'str_split' 메쏘드가 빠져서 누군가가 자신을 위해 작동하는 코드를 재현하려고한다면 그렇게 할 수 없습니다. –
그는 볼 수있는 free() 포인터를 다시 사용하지 않습니다. 그는 char ** 토큰이 아닌 char * 토큰을 자유롭게 사용할 수 있습니다. free() 이후에 반복되므로, 다른 포인터입니다. – torstenvl