помогите по C+, пожалуйста

Статус: Offline
Реєстрація: 11.06.2012
Повідом.: 175
  • 🟡 14:00 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #1
помогите по C+, пожалуйста

Вопрос следующий.

Создаю переменную типа 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?
 
  • 🟡 14:00 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #2



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;
}
 
  • 🟡 14:00 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #3


Если используется указатель:

testStruct obj;
testStruct *pObj;
pObj = &obj;

sprintf_s(pObj->line, "Hello World!");
memcpy(line1, pObj->line, sizeof(line1));

cout << line1 << endl;
 
  • 🟡 14:00 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #4
Забыл сказать.
При динамическом выделении памяти не забывайте использовать strlen.
 
  • 🟡 14:00 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #5
Эпичный




И где же вас не доучили тому что в ни в С ни в С++ нет нативного строкового типа?
Есть только указаталеь.
В частности указатель может указывать на массив, частным случаем которого есть строка.
Посему если вас интересует С++ то надо использовать std::string, если С - strcpy(line1, obj->line), если быть совсем точным и безопасным strncpy(line1, obj->line, length - 1), или есть желание изобрести велосипед, то while (*line1++ = *obj->line++); толкьо это сдвинет указатели на конец строк, посему строкой выше надо их поприсваивать временным переменным и копировать с их помощью.


Какой кошмар... И где такому учат?


И этот ОМГ - туда же.


А при выдилении не стеке не надо?
 
Останнє редагування:
  • 🟡 14:00 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #6
Не все такие умные как вы, lugal... что ж поделаешь.
 
  • 🟡 14:00 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #7
Не все такие умные как вы, lugal... что ж поделаешь.

Я не умный, я только учусь
А вообще на лицо непонимание фундаментальных основ языка. Без них дальше никуда.



З.Ы. Хста забыл дописать... Но по всей видимости надо
Опосля ентого strncpy(line1, obj->line, length - 1) надо писать от так:
line1[ length - 1] = '\0';
 
Останнє редагування:
  • 🟡 14:00 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #8
Спасибо, lugal, мне помог ответ RUH, stmcpy я пробовала, тоже ошибка возникла. memcpy сработало, и теперь все нормально. Можно больше не писать сюда
 
  • 🟡 14:00 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #9

Ты бы повежлевее был, и к тебе бы потянулись люди.

То, чем конкретно человек интересовался, то ему и было показано..
Показано откуда вобще берется указатель, который он пытается использовать (Понятно, что объявлять переменную структурного типа и тут же указатель на нее бессмысллица).
О "string", явно, тоже никто не спрашивал, кстати.
Тут куча вариантов решения задачи, и выбран самый простой и наглядный.

Ты сначала разберись, а потом будь таким "резким".
 
  • 🟡 14:00 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #10

Ну дело ваше, можете использовать и дальше ерись с memcpy Жизнь научит крашами использовать stmcpy
А что за ошибка кстате?
 
  • 🟡 14:00 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #11

Вангую, что компейлятор не находил функцию stmcpy
 
  • 🟡 14:00 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #12

А не то что?
За ерись с memcpy в средние века отдали бы под суд инквизиции
Что такое sprintf_s? Почему тогда не memcpy_s? Почему не strcpy_s или sprintf_s дважды? Это не код, а ужасное рагу. С таким же успехом можно было закастить С стайлом и все бы работало до поры до времени.

З.Ы. Если человек спрашивает о С++ (так как я не понимаю что такое С+) то там вообще не должно в коде быть никаких стековых или динамических массивов и указателей не строки - исключительно std::string.

Вангую, что компейлятор не находил функцию stmcpy

Я бы ее тоже не нашел на его месте

Вангую, что компейлятор не находил функцию stmcpy

З.Ы. Хстате коллега, известна ли вам хоть одна книга по си или плюсам, даже от самых дешевых парнокопытных россейских гуру (коими в свое время была завалена уся балка) где в первой, максимум второй главе не обсуждается работа с С-style строками и очень болшими буква не сказано что С-style строки присваивать нельзя напрямую?
 
  • 🟡 14:00 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #13

Знаешь, я буду умнее, и перестану тебя комментировать.
 
  • 🟡 14:00 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #14
  • 🟡 14:00 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #15
а разве все функции strxxx не дописывают сами нуль в конце результата?
на сколько я понял их отличие от memcpy, в том что копирование идет до первого нулевого байта.
 
  • 🟡 14:00 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #16

не все и не всегда. Почитай референс по strncpy.
 
  • 🟡 14:00 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #17
да действительно. а еще печально что нет оптимизации на ассемблере, я думал там используются потоковые команды процессора, а оказывается тупое копирование побайтно.
 
  • 🟡 14:00 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #18

У кого? И в каком режиме компиляции? string.h меня как то мало интересовал, я смотрел листинги math.h - там нередко сложые вычисления делаются одной инструкцией.