Вопрос следующий.
Создаю переменную типа char и хочу приисвоить ей значение элемента структуры obj1->line. Делаю так:
...
char line1[length];
line1 = obj->line;
...
получаю ошибку: incompatible types when assigning to type «char[4096]» from type «char * const»
при том, что если просто выводить на печать
printf("%s\n", obj1->line);
то выводится строка как есть.
как мне присвоить переменной line1 строку, которая содержится в obj->line?
Вопрос следующий.
Создаю переменную типа char и хочу приисвоить ей значение элемента структуры obj1->line. Делаю так:
...
char line1[length];
line1 = obj->line;
...
получаю ошибку: incompatible types when assigning to type «char[4096]» from type «char * const»
при том, что если просто выводить на печать
printf("%s\n", obj1->line);
то выводится строка как есть.
как мне присвоить переменной line1 строку, которая содержится в obj->line?
Вопрос следующий.
Создаю переменную типа char и хочу приисвоить ей значение элемента структуры obj1->line. Делаю так:
...
char line1[length];
line1 = obj->line;
...
получаю ошибку: incompatible types when assigning to type «char[4096]» from type «char * const»
при том, что если просто выводить на печать
printf("%s\n", obj1->line);
то выводится строка как есть.
как мне присвоить переменной line1 строку, которая содержится в obj->line?
typedef struct {
char line[20];
int data;
}testStruct;
.....
int main (void){
char line1[20] = { 0 };
testStruct obj;
....
sprintf_s(obj.line, "Hello World!");
memcpy(line1, obj.line, sizeof(line1));
cout << line1 << endl;
.....
while(1);
return 0;
}
Если используется указатель:
testStruct obj;
testStruct *pObj;
pObj = &obj;
sprintf_s(pObj->line, "Hello World!");
memcpy(line1, pObj->line, sizeof(line1));
cout << line1 << endl;
Забыл сказать.
При динамическом выделении памяти не забывайте использовать strlen.
Не все такие умные как вы, lugal... что ж поделаешь.
Я не умный, я только учусь
А вообще на лицо непонимание фундаментальных основ языка. Без них дальше никуда.
З.Ы. Хста забыл дописать... Но по всей видимости надо
Опосля ентого strncpy(line1, obj->line, length - 1) надо писать от так:
line1[ length - 1] = '\0';
Спасибо, lugal, мне помог ответ RUH, stmcpy я пробовала, тоже ошибка возникла. memcpy сработало, и теперь все нормально. Можно больше не писать сюда
Ну дело ваше, можете использовать и дальше ерись с memcpyЖизнь научит крашами использовать stmcpy
А что за ошибка кстате?
Ты бы повежлевее был, и к тебе бы потянулись люди.
То, чем конкретно человек интересовался, то ему и было показано..
Показано откуда вобще берется указатель, который он пытается использовать (Понятно, что объявлять переменную структурного типа и тут же указатель на нее бессмысллица).
О "string", явно, тоже никто не спрашивал, кстати.
Тут куча вариантов решения задачи, и выбран самый простой и наглядный.
Ты сначала разберись, а потом будь таким "резким".
Вангую, что компейлятор не находил функцию stmcpy
Вангую, что компейлятор не находил функцию stmcpy
А не то что?
За ерись с memcpy в средние века отдали бы под суд инквизиции
Что такое sprintf_s? Почему тогда не memcpy_s? Почему не strcpy_s или sprintf_s дважды? Это не код, а ужасное рагу. С таким же успехом можно было закастить С стайлом и все бы работало до поры до времени.
З.Ы. Если человек спрашивает о С++ (так как я не понимаю что такое С+) то там вообще не должно в коде быть никаких стековых или динамических массивов и указателей не строки - исключительно std::string.
Знаешь, я буду умнее, и перестану тебя комментировать.
а разве все функции strxxx не дописывают сами нуль в конце результата?
на сколько я понял их отличие от memcpy, в том что копирование идет до первого нулевого байта.
да действительно. а еще печально что нет оптимизации на ассемблере, я думал там используются потоковые команды процессора, а оказывается тупое копирование побайтно.