Вкусовщина, имхо. Может понадобиться только тогда, когда тебе вот позарез захотелось назвать переменную так, но у тебя уже есть другая переменная с таким именем.
Первое.
Не стоит определять функции внутри main() - определения функций следует вынести выше main(). scanf("%d", &password);
Что будет, если:
- я введу не число?
- я ничего не введу (пустую строку)?
- я введу строку типа "123 123"?
if (intype == 2)
{
break;
directory = 2;
}
directory никогда не получит значения 2, потому что break - команда немедленного выхода из цикла.
Пересчитать пробелы в строке
Взять памяти на тип int на единицу больше чем насчитал пробелов (можно на два, для страховки)
Двигаясь по строке, последовательно заменять пробел на '\0' и через atoi() например переводить элемент строки в элемент массива.
Вообще говоря, вкусовщина. align 4 означает выравнивание на границу слова, если там данных один байт, три пропадает. align 1 - никакого выравнивания, данные идут друг за другом. Но эффект (в виде разницы в требовании памяти) будет проявляться только при большом количестве обьектов данного типа (миллионы единиц).
Ну, наверное проверить, что передаваемая строка содержит только цифры. И не забыть, что long integer имеет хоть большую, но конечную длину, соответственно ввод нужно проверять на длину - иначе первый же какер-недоучка попробует вас на зуб переполнением ввода.
Да, в общем-то русским (английским) по черному написано - data_process.c включает data_process.h, который первым определил функцию normalization().
А потом сам data_process.c определил функцию normalization() чуть пониже - ессно компилятор выдает замечание о переопределении, ибо оно есть :)
Никогда не задумывался, потому что сколько на С пишу - всегда пишуchar *aaam, bbbm;
и мне так сразу понятно, что первая переменная у меня - указатель, а вторая - нет.
Отключи оптимизацию при сборке ключом -O0. В режиме оптимизации GCC вполне способен сам скрячить undefined behavior оптимизацией "неправильно" расположенных переменных, например.
Нет. Никакого преобразования типов не произошло. int x = 42;
Присвоили переменной х типа int (как правило четырехбайтовой, знаковой) значение 42; x /= 10;
Поделили нацело на 10, получили 4 x += '0';
Прибавили к x 48 (код символа '0'). Где тут преобразование типа? Равным образом могло стоять 'A', 'Z', '+' и т.д. Компилятор просто решил, что Вам так удобнее записать свою мысль.
Структура не может быть указателем. Но можно иметь указатель на структуру и это постоянно используется. Посмотри пример от Wataru - там есть все, что надо. Ты конечно мусор считаешь, потому что структура создалась на куче, но мусор - тоже данные :)
malloc потому и возвращает void, потому что ответственность за то, какого типа будет массив - на программисте.
Если нужно заполнить его фиксированным значением - есть memset()
Если нужно заполнить нулями - обычное дело перед тем, как начать работу со строками - есть calloc()
Если нужно расписать его структурным типом - ну определи структуру, потом приведи массив к типу структуры и циклом пробегись