Рейтинг:
2
Richard MacCutchan
Почему вы используете низкий уровень read
чтобы получить пользовательский ввод? Использовать системный вызов, как gets_s, _getws_s[^] который читает полную строку.
Кроме того, вы не объяснили, что не так с вашей программой.
Member 13933893
@Richard-MacCutchan, я пытаюсь скомпилировать это в shellforge, который не позволяет использовать внешние библиотеки C.
Я новичок в системных вызовах C и поэтому не знал, как это сделать.
Я считаю, что gets требует внешней библиотеки, если я не ошибаюсь.
Я не уверен, что написанная программа верна или нет, это моя забота.
Я хочу прочитать имя пользователя и пароль и сохранить их в файле.
Не могли бы вы подсказать мне, будет ли то, что я сделал, работать для записи в файл или если gets_s можно использовать без библиотечного файла .
Richard MacCutchan
Я понятия не имею, что такое шеллфордж.
Однако, насколько я вижу, единственная проблема, которая у вас есть, заключается в следующей строке:
fd = fd("user.dat", O_CREAT | O_RWDR, 0666);
Вы набрали fd( ... вместо open(. Так и должно быть:
fd = open("user.dat", O_CREAT | O_RWDR, 0666);
Member 13933893
@Richard-MacCutchan. Спасибо за поправку.
Я исправил свой код и теперь он выглядит следующим образом:
#определить O_RDWR 0x0002
#определить O_CREAT 0x0100
#define USERNAME_SIZE 10
тап_п()
{
int fd;
fd = open("user.dat", O_CREAT | O_RWDR, 0666);
если (fd == -1)
{
напишите(1,"есть ошибка открытия файла",35);
}
напишите(1,"введите имя пользователя",18);
char username[USERNAME_SIZE];
чар с;
int count = 0;
делать
{
читать(0, &c, 1);
если (c == '\n')
перерыв;
имя пользователя[count++] = c;
}
while (count < USERNAME_SIZE - 1);
имя пользователя[count] = 0;
писать(ФД,имя пользователя граф);
закрыть(fd);
возвращает 0;
}
-----Однако при запуске я получаю сообщение об ошибке, говорящее, что произошла ошибка при открытии файла ( я предполагаю, что файл не создается. )Что именно я должен делать в этом случае?
Если файл присутствует, то код работает нормально.
Richard MacCutchan
Ваше сообщение об ошибке не содержит достаточной информации. Когда я запускаю код в своей системе, он работает независимо от того, присутствует файл или нет, поэтому я не могу догадаться, в чем заключается ваша ошибка.
Member 13933893
@Richard-MacCutchan.
Спасибо за ваше руководство. Теперь мне удалось запустить программу .
Не могли бы вы помочь мне или направить меня, как сравнить 2 строки без использования функции strcmp?
Richard MacCutchan
Это довольно простое упражнение по сравнению отдельных персонажей. Но мой общий совет состоял бы в том, чтобы заполучить хороший справочник по языку Си или следовать некоторым онлайн-учебникам (см. learn C - поиск в Google[^Вопросы CodeProject-не самое лучшее место, если вы новичок, пытающийся выучить язык.
Richard MacCutchan
Я только что погуглил shellforge, и он выглядит как очень старый (и странный) продукт. Я предлагаю вам перейти к более позднему компилятору. Visual Studio Community Edition от Microsoft включает в себя компилятор C/C++ и доступен бесплатно. И GNU gcc/g++ также свободен.