#c
#c
Вопрос:
Правильно ли это выражение?
{
char a;
char *temp;
for(int j = 0; j < len; j )
{
strcpy(amp;temp[j], (char*)a);
}
}
в этом случае код a
обновляется извне пользовательским вводом / нажатием клавиши. Я хочу скопировать все входящие / обновленные данные a
в temp
как целую строку.
Комментарии:
1. @ObscureRobot: Вы можете создавать именованные ссылки в комментариях в формате [имя] (адрес).
2. это ошибка в коде StackOverflow, которая автоматически превращает короткие ответы в комментарии. Я думал, что уже удалил этот комментарий, я удалил его еще раз.
Ответ №1:
Поскольку ‘ a
‘ в вашем примере не завершается нулем, и вы хотите назначить один символ в строковом буфере, вы можете сделать:
int const buffer_size = 5;
char a = 'c';
char *temp = new char[buffer_size]; // Remember to allocate your string buffer
temp[index] = a;
// .....
delete[] temp; // free buffer.
index
является int
, который вы можете использовать для отслеживания следующей позиции в буфере.
Ответ №2:
Нет по нескольким причинам:
temp
не инициализируется, оно указывает на какое-то случайное местоположение, и для него не выделено никакой памяти, так что вы просто будете записывать поверх случайной части памяти (и / или аварийно завершите работу).a
является одиночным,char
и вы обрабатываете его значение как строку (char*
), используяstrcpy
(я предполагаю, что вы имели в виду,(char*)amp;a
что все еще неверно).strcpy
продолжает копированиеchar
данных из источника (a
) в пункт назначения, пока не достигнет''
в источнике…которое может быть где угодно, посколькуa
это не строка с нулевым завершением, аchar
.
Если вы хотите записать / добавить единицу char
в строку / буфер, вы просто делаете buffer[position] = character
, где buffer
— это char[]
или a char*
, указывающее на блок выделенной памяти, position
— это позиция в буфере, которую вы хотите вставить char
, и character
очевидно, что это так char
.
В любом случае, я понятия не имею, что вы пытаетесь сделать, или логику, лежащую в основе того, почему вы пытаетесь сделать то, что вы пытаетесь сделать вот так.
РЕДАКТИРОВАТЬ: А также у вас это помечено как C , почему вы не используете std::string
и std::cin
используете ли вы на самом деле C ?
Ответ №3:
Ваш код ошибочен во многих отношениях:
-
Вы не можете преобразовать символ в символ char*. Вы должны сделать что-то вроде этого:
(char *)amp;a;
и посколькуa
это символ, вам вообще не нужно его приводить. -
Вам не нужно
strcpy
это. Вы можете просто сделать что-то вроде:temp[j] = a;
-
char *temp
ему не назначена связанная память. Итак, вам нужно сделать что-то вроде этого:char *temp = malloc(sizeof(char) * len);
Полный код здесь:
{
char a = myFunToGetInput();
char *temp = malloc(sizeof(char) * len));
for(int j = 0; j < len; j ) {
temp[j] = a;
}
}
Или, если вы уже использовали memset ранее:
{
char a = myFunToGetInput();
char *temp = malloc(sizeof(char) * len));
memset(temp, (unsigned char)a, len);
}
Комментарии:
1. Это было бы хорошим ответом для C. В C используйте
std::string
, чтобы избежать утечек памяти.2. В последнее время много работал с C, поэтому это застряло у меня в голове. Тем не менее, спасибо за совет.