Положить строку в целочисленный массив
Пользователь вводит строку, которая содержит три числа в 16-й СС, разделенные пробелом (каждое число содержит по две цифры). Эта строка передается в отдельную функцию, и там она разделяется по пробелу. Затем каждые составные части строки кладутся в целочисленный массив. Потом массив возвращается при помощи return;
Недавно перешел на СИ.
Пример моего кода:
#include <stdio.h>
#include <string.h>
char* subkeys(char *str) {
int i = 0;
char array[3] = {0};
char* token = strtok(str, " ");
array[i] = *token;
printf("%d\n", array[i]);
while (token != NULL) {
i++;
token = strtok(NULL, " ");
array[i] = *token;
printf("%d\n", array[i]);
}
return 0;
}
int main() {
int length = 6 + 2 + 1; //3 числа, 2 пробела и 1 терминатор
char str[length];
fgets(str, length, stdin);
subkeys(str);
return array;
}
Во-первых, проблема с выводом массива. Понятия не имею как это. Во-вторых, вместо печатания элементов массива, оно печатает совершенно другие числа.
Ответы (1 шт):
Автор решения: Harry
→ Ссылка
Ну, я бы исправил ваш код так:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int* subkeys(char *str) {
int i = 0;
int * array = malloc(3*sizeof(int));
for(char* token = strtok(str, " "); i < 3 && token;
token = strtok(NULL, " "))
{
array[i++] = strtol(token,NULL,16);
}
return array;
}
int main() {
char str[128];
fgets(str, 128, stdin);
int * a = subkeys(str);
for(int i = 0; i < 3; ++i)
printf("a[%d] = %4d (0x%02x)\n",i+1,a[i],a[i]);
free(a);
}
Защит от дурака тут две — не один пробел между числами, и больше, чем три введенных числа. Если и ее убрать, можно и еще проще...