\r\n
- это возврат каретки, символ новой строки и два пробела в начале вашей даты. Попробуйте использовать trim ..
$('#endDate').val($.trim(value));
Строгие правила псевдонимов не заботятся о промежуточных приведениях. Они заботятся только о типе указателя, который в конечном итоге используется для доступа к объекту, и об исходном типе самого объекта (технически это «эффективный тип», но это сейчас не важно).
В вашем примере кода вы берете адрес int
. Результат имеет тип int *
. Вы приводите этот указатель к char *
, вы снова приводите его к int *
, и только тогда вы разыменовываете его. Тип указателя, используемого в доступе, - int *
, а тип объекта, на который указывает объект, - int
, поэтому строгие правила наложения имен не имеют проблем.
Вы правы, что строгие правила псевдонимов асимметричны по отношению к char
, но это имеет значение только тогда, когда либо тип самого объекта равен char
, либо тип указателя, используемого при доступе, равен char
:
char x[sizeof(int)] = { 0 };
*(int *)x = 1; // undefined behavior
int y = 1234;
*(char *)y = 0; // valid; value of y becomes unspecified
Теоретически, приведение между двумя типами указателей может потерять информацию, но не при приведении из другого типа к char *
и обратно. Кроме того, это относится только к компьютерам, с которыми вы вряд ли столкнетесь в наши дни. Я не могу вспомнить пример.
Нет, это не нарушение.
, потому что мы разыграли
blockquote>char *
вint *
Вы пропустили ту часть, которую
char *
, которую вы упомянули, на самом деле была [113 ]. Таким образом, наконец, доступ к типуint
осуществляется через указатель наint
- это совершенно верно.
Этот код действителен. Разрешается выполнять преобразование между двумя типами указателей объектов и обратно при условии, что нет проблем с выравниванием, а преобразование в char *
явно разрешает доступ к представлению объектов (т. Е. Считывает отдельные байты).
Раздел 6.3.2.3p7 стандарта C гласит:
Указатель на тип объекта может быть преобразован в указатель на другой тип объекта. Если результирующий указатель неправильно выровнен для ссылочного типа, поведение не определено. В противном случае при обратном преобразовании результат сравнивается равным исходному указателю. Когда указатель на объект преобразуется в указатель на тип символа, результат указывает на младший адресуемый байт объекта. Последовательные приращения результата, вплоть до размера объекта, дают указатели на оставшиеся байты объекта.
blockquote>Поскольку вы переходите от
int *
кchar *
, а затем обратно кint *
, здесь нет строгих нарушений псевдонимов.