неподписанный шорт, line — массив чаров. ругань следующая:
main.c:29:30: error: passing argument 2 of ‘strcpy’ makes pointer from integer without a cast [-Wint-conversion]
29 | strcpy(line, (char)current_number);
| ^~~~~~~~~~~~~~~~~~~~
| |
| char
In file included from main.c:6:
/usr/include/string.h:141:70: note: expected ‘const char * restrict’ but argument is of type ‘char’
141 | extern char *strcpy (char *__restrict __dest, const char *__restrict __src)
| ~~~~~~~~~~~~~~~~~~~~~~~^~~~~
make: *** [makefile:11: main] Error 1
что делать? я пока что не в полном объёме понимаю принцип работы указателей; кажется, в этом проблема.
помогите пожалуйста
Предположу, что current_number это объект типа инт, тебе надо его распарсить в строку (хотя бы через sprintf), а не просто кастовать к чару (про тип объекта в аргументе тебе уже написали).
я писал выше, что это инт. спасибо за ваш ответ
то есть, необходимо сначала из куррент нумбера сварить чар, потом получить на него поинтер, а потом этот поинтер засунуть в strcpy? я правильно понимаю?
Не чар, а массив чаров
вы скажите высокоуровнево, что вы хотите сделать
слепить строку из разных вещей и выплюнуть её на экран. среди вещей есть шорты, а есть строки. со строками проблем нет, с числами вот только
sprintf() или snprintf()
Можно проще, я тебе написал sprintf. sprintf(str + strlen(str), "%hd", current_nymber); *Только надо память под изначальную строку выделять с запасом.
80, мне с запасом хватит. у неё длина всегда постоянна будет в итоге
сделал вот так, столкнулся с проблемой: как очищать массив чаров? я подобную строку собираю в цикле, в конце каждой итерации хотел бы сбрасывать её содержимое. пока что пишет stack smashing detected — подозреваю, что в строке место закончилось. смотрю вот сюда, но нельзя ли как-то проще?
Чтобы очистить строку в си, достаточно в нулевой элемент записать 0
почему-то не сработало. нашёл какой-то bzero, с ним всё получилось. странновато, что есть string.h, а есть strings.h всем спасибо, у меня всё получилось
bzero это просто memset с байтом заполнения 0. Он просто в каждый байт строки записывает 0 (что вообще говоря бессмысленно, если речь идёт про си-строки)
Обсуждают сегодня