Стажер, работающий со мной, показал мне сданный им экзамен по информатике, посвященный проблемам порядка следования байтов. Был вопрос, который показывал строку ASCII "My-Pizza", и студент должен был показать, как эта строка будет представлена в памяти на компьютере с прямым порядком байтов. Конечно, это звучит как вопрос с подвохом, потому что строки ASCII не подвержены проблемам с порядком байтов.
Но шокирует то, что стажер утверждает, что его профессор настаивает на том, чтобы строка была представлена как:
P-yM azzi
Я знаю, что это не может быть правильным. Ни на одной машине строка ASCII не может быть представлена таким образом. Но, видимо, профессор настаивает на этом. Итак, я написал небольшую программу на C и сказал стажеру передать ее своему профессору.
#include <string.h>
#include <stdio.h>
int main()
{
const char* s = "My-Pizza";
size_t length = strlen(s);
for (const char* it = s; it < s + length; ++it) {
printf("%p : %c\n", it, *it);
}
}
Это ясно демонстрирует, что строка хранится в памяти как «My-Pizza». Через день стажер возвращается ко мне и сообщает, что теперь профессор утверждает, что C автоматически преобразует адреса для отображения строки в правильном порядке.
Я сказал ему, что его профессор сумасшедший, и это явно неправильно. Но просто чтобы проверить свое собственное здравомыслие здесь, я решил опубликовать это на stackoverflow, чтобы я мог заставить других подтвердить то, что я говорю.
Вот я и спрашиваю: кто здесь?
%p
в OP (хорошо сыгранное) говорит вам все, что вам действительно нужно знать. - person Chris Lutz   schedule 14.10.2009strlen()
в условном циклеfor()
заставляет меня съеживаться. - person Chris Lutz   schedule 14.10.2009