Это должно сделать это.
const createdData = {
subject: '1',
date: '2',
header: '3',
message: '4'
}
const string = JSON.stringify(createdData)
const escapedString = JSON.stringify(string)
Проще говоря, массивы нельзя назначать. Они являются «немодифицируемым значением». Это, конечно, вызывает вопрос: почему? Пожалуйста, обратитесь к этому вопросу для получения дополнительной информации:
Почему C ++ поддерживает членское присвоение массивов внутри структур, но не в целом?
Массивы не являются указателями. x
здесь делает ссылаются на массив, хотя во многих случаях это "разлагается" (неявно преобразуется) в указатель на его первый элемент. Аналогично, y
также является именем массива, а не указателем.
Вы можете назначать массивы внутри структур:
struct data {
int arr[10];
};
struct data x = {/* blah */};
struct data y;
y = x;
Но вы не можете делать это напрямую с массивами. Используйте memcpy
.
В некоторых сообщениях здесь говорится, что имя массива дает адрес его первого элемента. Это не всегда так:
#include <stdio.h>
int
main(void)
{
int array[10];
/*
* Print the size of the whole array then the size of a pointer to the
* first element.
*/
printf("%u %u\n", (unsigned int)sizeof array, (unsigned int)sizeof &array[0]);
/*
* You can take the address of array, which gives you a pointer to the whole
* array. The difference between ``pointer to array'' and ``pointer to the
* first element of the array'' matters when you're doing pointer arithmetic.
*/
printf("%p %p\n", (void*)(&array + 1), (void*)(array + 1));
return 0;
}
Вывод:
40 4
0xbfbf2ca4 0xbfbf2c80
Чтобы назначить массивы, вам нужно будет присвоить значения внутри массива.
т.е. x = y эквивалентно
for(int i = 0; i < 10 < ++i)
{
x[i] = y[i];
}
Когда говорят, что «int x [10]» говорит «зарезервируйте место для 10 целых чисел и передайте мне указатель» к месту ". Таким образом, чтобы копия имела смысл, вам нужно работать с памятью, на которую указывает, а не с «именем ячейки памяти».
Так что для копирования вы бы использовали цикл for или memcpy ().
Я использовал компиляторы C, где это прекрасно скомпилировалось бы ... и при запуске кода получилось бы x point к массиву y.
Вы видите, в C имя массива является указателем, который указывает на начало массива. Фактически, массивы и указатели по существу взаимозаменяемы. Вы можете взять любой указатель и индексировать его как массив.
В те времена, когда C разрабатывался в начале 70-х годов, он предназначался для относительно небольших программ, которые были чуть выше ассемблера в абстракции. В этой среде было чертовски удобно иметь возможность легко переключаться между индексированием массива и математикой указателя. С другой стороны, копирование целых массивов данных было очень дорогим делом, и вряд ли что-то поощрялось или отвлекалось от пользователя.
Да, в наше время было бы более разумно, чтобы имя массива было сокращенным для «всего массива», а не для «указателя на начало массива». Тем не менее, C не был разработан в эти современные времена. Если вы хотите язык, который был, попробуйте Ада. x: = y делает именно то, что вы ожидаете; он копирует содержимое одного массива в другой.