У меня возникли некоторые проблемы с использованием системных вызовов в C. Я пытаюсь использовать read
для чтения некоторых входных данных из stdin
, а затем использовать strtok для загрузки значений в массив, но я не могу этого сделатьэто верно (я продолжаю получать segfault).
Вот код, с которого я начал:
void read_input()
{
char* c;
read(0, c, 128);
printf("%s", c);
}
Итак, все работает отлично, и я могу напечатать вывод.Тем не менее, я попробовал несколько вещей дальше, и они не сработали.Я пытался:
- Создание массива
char arr[128]
, затем с использованием различных вариантов strcpy
, strncpy
и memcpy
для копирования c
в arr
, но у них нетне сработало, и я получил ошибку.
Собственно, это все, что я пробовал.Я не уверен, как я должен скопировать c
в arr
, чтобы я мог использовать strtok
.Кто-нибудь может объяснить?
Спасибо
Редактировать:
Ладно, это мой новый код:
void
read_input()
{
char arr[129];
int r = read(0, arr, 129);
printf("%s", arr);
arr[r] = '\0';
char* pch;
pch = strtok(arr, " \n");
while(pch != NULL)
{
printf("%s\n", pch);
pch = strtok(NULL, " \n");
}
}
Я пытаюсь прочитать из стандартного вводавведите как "привет, меня зовут Джон".Вот вывод, который я получаю из printfs:
hi my name is john
�����hi
my
name
is
john
Почему первый токен выглядит так?Я заметил, что если я не добавлю arr[r] = '\0'
, то «Джон» будет выглядеть как «Привет».Что мне нужно сделать для первого персонажа, похожего на последний?