среда, 18 апреля 2012 г.

Прелести С-строк


Странно, зачем вообще разрешать этому фрагменту компилироваться? Ну да ладно.

char* symbolArrayNoSize = new char[];
cout << symbolArrayNoSize << endl;


Имеем массив символов неопределённого размера. В результате отображения на экране скорее всего будет выводиться весь хлам до первого символа '\0'. Запуск фрагмента подтвердил предположение:


¤¤¤¤ллллллллю■ю■


Предлагаю вашему вниманию следующий фрагмент:

const int ARRAY_LENGTH = 5;
char* symbolArray = new char[ARRAY_LENGTH];
strncpy(symbolArray, "abcdefghijklmnop", ARRAY_LENGTH);
cout << symbolArray << endl;


Казалось бы, здесь всё по фэн-шую: размер массива задали, в него скопировали именно необходимое количество символов и вывели на экран. Не тут-то было:

abcde¤¤¤¤иR╕ЧиRШ¤¤¤¤

Из этого результата один прискорбный вывод: задаёшь размер массива явным образом - всё равно содержимое будет выводиться до первого встречного '\0'. Так спрашивается, какого хрена задавать размер массива, если он всё равно сомнительную роль играет? Где логика-то?


const int ARRAY_LENGTH = 5;
char* symbolArray = new char[ARRAY_LENGTH + 1];
// Length of useful data is ARRAY_LENGTH plus 1 symbol '\0',

// meaning the end of the string.
symbolArray[ARRAY_LENGTH] = '\0';
// Put the delimiter of the string on its proper position
strncpy(symbolArray, "abcdefghijklmnop", ARRAY_LENGTH);
cout << symbolArray << endl;


И только в результате вот таких манипуляций получаем ожидаемый результат:

abcde

Удобно? Не очень. Используйте обёрточные классы для С-строк. Не выделывайтесь.
Компилировал в Visual Studio 2010.

"Как писать в Java в private поле?"

Вопрос: зачем такое разрешать?


public class Foo {
private String fooPrivateField;
};


Foo foo = new Foo();
Field f = Foo.class.getDeclaratedField("fooPrivateField");
f.setAccessible(true);
f.set(foo, "valueHelloWorld!");

Очередная возможность выстрелить себе в ногу. Сможете найти оправдание этой возможности языка?
Стырил у Димы Погорелова. Подозреваю, что он сам это у кого-то стырил.

понедельник, 2 апреля 2012 г.

Завсегдатаям социальных сервисов и сетей


Что заставляет вас шастать по интернету поздно вечером? Почему вы не ложитесь спать? К чему эти «ВКонтакте», «Одноклассники», «Facebook», «ICQ», «jabber», «skype» и прочие? Вы же висите там часами! Бежите от реальности? От одиночества? От чего?
Ладно если все эти коммуникации – часть вашей работы или дополнения к ней. Ладно, если вы отправили электронное письмо другу на ином континенте. Так уж и быть – вояйте, если вы с помощью этих сервисов привносите в мир нечто уникальное – пишете блог, статьи, поэмы, музыку…
А если нет?
Позаводили себе кучу друзей, которых в жизни никогда в глаза не видели, выложили кучу своих фото и перешли на тариф «Я популярен»?
Что? Вы ещё и деньги вкладываете для поднятия «репутации», «рейтинга» или чтобы отослать товарищу на день рождения нарисованый подарок? Покупаете пиксели? Да вы рехнулись совсем!
Если вы не инвалид, если вашу свободу никто не ограничивает, то эти социальные сети не должны становиться частью вашей жизни. Они в лучшем случае - лишь маленькое дополнение.