#include <iostream>
using namespace std;
char *writeInt(int v)
{
char lol[] = {};
lol[0] = (((v >> 24) & 0xFF));
lol[1] = (((v >> 16) & 0xFF));
lol[2] = (((v >> 8) & 0xFF));
lol[3] = (((v ) & 0xFF));
}
int readInt(char i[])
{
return (
((i[0] << 24) & 0xFF) |
((i[1] << 16) & 0xFF) |
((i[2] << 8) & 0xFF) |
(i[3] & 0xFF));
}
int main()
{
writeInt(10);
std::cout << readInt(writeInt(10)) << std::endl;
return 0;
}
Выдает Segmentation fault
char lol[] = {};
Ну, т.е. пустое место. Ни одного элемента в массиве, но все равно пишем? уже достаточно для проблем... Кстати, тот же VC++ этот код не скомпилирует - нулевых массивов не бывает. Но даже если исправить - что вы собираетесь вернуть? Ведь return
во writeInt
нет - оно же опять не компилируется!
Вывод: или вы пользуетесь калечным компилятором, или вводите нас в заблуждение :)
Вот так - еще куда ни шло:
unsigned char *writeInt(int v)
{
static unsigned char lol[4];
lol[0] = (((v >> 24) & 0xFF));
lol[1] = (((v >> 16) & 0xFF));
lol[2] = (((v >> 8) & 0xFF));
lol[3] = (((v ) & 0xFF));
return lol;
}
int readInt(unsigned char i[])
{
return (
((i[0] << 24) ) |
((i[1] << 16) ) |
((i[2] << 8) ) |
(i[3] ));
}
int main()
{
writeInt(10);
std::cout << readInt(writeInt(10)) << std::endl;
return 0;
}
Язык С++ не допускает таких объявлений в принципе
char lol[] = {};
Программа некорректна. Любые попытки выполнения такой "программы" приводят к неопределенному поведению, проявлением которого запросто может быть и Segmentation fault.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Меня интересует вопрос, касающийся оптимизации сложного возвращаемого значения
Подскажите,как сделать так чтобы огромной количество if-ов работало вместе и приводило к ответу? Моя программа ничего не выводит, а должна
Таким образом кодирую int, но при декоде большие числа не корректно отображаютсяПример в данном случае возвращает 10, но возьму число 10000 мне...