Member 12330615 Ответов: 2

Как преобразовать char * в массив char или структурную переменную?


В моем коде VC++ ,

Я хочу переместить значение в другие переменные, такие как:

char* buf = " 12345";

char logbuffer[1024];

strcpy(logbuffer, buf);

структура xx{
int a;
char b[1024];
}

xx гг;
memcpy(& yy. b, logbuffer, strlen(logbuffer));

Я думаю, что это правильно.

но

если logbuffer и yy являются массивами типа этого;

char logbuffer[2][1024];

xx yy[2];

и если я попытаюсь переместить значение buf в эти переменные, как это:

strcpy (logbuffer[1], buf) и, или

memcpy(& yy[1]. b, logbuffer[1], strlen(logbuffer[1]));

сделайте ошибку компиляции, чтобы сказать неоднозначный сентенс....

Я не знаю, в чем тут главная проблема.

Пожалуйста, дайте мне знать ответ и правильный метод.

Заранее спасибо.

Что я уже пробовал:

Еще 1 день потрачен впустую на эту проблему.

Michael Haephrati

Этот вопрос настолько неясен с точки зрения его английского языка, что мне пришлось прочитать его 5 раз, и все же я его совсем не понимаю. В своем ответе я дал общее объяснение, но не могу прокомментировать сам ваш исходный код, потому что неясно, где он начинается и где заканчивается. Что не сработало, а что сработало?

2 Ответов

Рейтинг:
12

Michael Haephrati

Не используйте memcpy.
Чтобы скопировать одну строку в другую, используйте strcpy ().
strcpy получил указатель на каждый массив символов или, если быть точным, на первый символ в массиве с нулевым завершением.


Рейтинг:
1

Richard MacCutchan

Попробовать это:

char* buf = "12345";
char logbuffer[1024];

struct xx {
    int a;
    char b[1024];
};
xx yy;

strcpy(logbuffer, buf);
memcpy(yy.b, logbuffer, strlen(logbuffer)); // do not use & on yy

char logbufferb[2][1024];
xx yyb[2];

strcpy(&logbufferb[1][0], buf);  // do use & on logbufferb[1]

memcpy(yyb[1].b, &logbufferb[1][0], strlen(&logbufferb[1][0])); // see above comments

Обратите внимание на вышеприведенные комментарии в отношении addressof оператор (&). Также обратите внимание, что использование memcpy не null завершает строки, поэтому у вас могут возникнуть проблемы с ним, всегда используйте strcpy.