Приведение между uint8_t * и char *. Что просходит? - PullRequest
1 голос
/ 11 мая 2011

Что происходит при приведении между этими двумя в отношении символа завершения? В C99 Objective-C.

Ответы [ 2 ]

4 голосов
/ 11 мая 2011

Я полагаю, что в этом ответе в вашей системе используется 8 бит.

Если ваша архитектура использует unsigned char в качестве типа char, тогда абсолютно ничего не произойдет.

Если вашархитектура использует signed char как тип char, тогда отрицательные значения char будут обернуты вокруг, что может привести к неожиданным результатам.Это, однако, никогда не произойдет с нулевым символом завершения.


Обратите внимание, что при "приведении" ничего не происходит, вы просто указываете компилятору интерпретировать определенное место в памяти по-разному.Эта разница в интерпретации создаст фактические (побочные) эффекты приведения.

0 голосов
/ 11 мая 2011

Если char и uint8_t являются совместимыми типами (они должны быть на большинстве современных настольных компьютеров), указатели на объекты этого типа имеют одинаковые требования к представлению и выравниванию, поэтому не должно возникнуть проблем при преобразовании (неявно или явно с приведением) один к другому.

Указанные значения, опять же, если они совместимы, должны обрабатываться одинаково, независимо от того, к какому типу они интерпретируются.

Примечание. Я не уверен на 100%, что uint8_t и char совместимы в реализации с подписанными символами.

Если типы несовместимы, вы вызываете Undefined Behavior, и может произойти все что угодно: очень вероятно, что все «работает», как вы ожидаете - но нет гарантии, что оно всегда будет работать одинаково

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...