Выполнение задачи программы сообщений и возникла проблема, которую я не понимаю с помощью буфера. Ответ, который я уверен, действительно прост, но я просто не могу обернуть его вокруг. Я пытаюсь попросить пользователя ввести 10-значное имя, которое будет работать как имя пользователя.массив символов, хранящий слишком много символов? (C++)
char myID[11]; // stores 10 characters plus newline at the end
char sendBuff[1024]
cout << "Enter your nickname(10 digits): ";
cin >> myID;
cin.ignore(1000, '\n'); //clears buffer, or so I thought
Тогда я получить фактический текст сообщения, хранить его в tempCharArray, а затем объединить имя и текст сообщения с помощью sprintf_s.
char tempCharArray[1024];
cin.getline(tempCharArray, 1024);
sprintf_s(sendBuff, 1024, "%s: %s", myID, tempCharArray); //combines username and message text into one line before being printed
Теперь моя проблема заключается в том, что если я ввожу имя длиннее 10 цифр, он печатает полное имя в функции sprintf_s, несмотря на MyId быть только 10 символов. Я совсем не понимаю этого поведения ...
Например, если я нахожу «HelloKitty69420» в myID, а затем «yoyoyo» в tempCharArray, я бы ожидал, что он напечатает «HelloKitty: yoyoyo», потому что myID может только удерживайте 10 символов, но он печатает «HelloKitty69420: yoyoyo».
Что происходит?
Исправить и просто добавить, когда вы делаете cout, он печатает символы, пока не достигнет символа EOL. Не имеет значения, что массив символов имеет длину 10 и что есть утечка памяти. Как говорит stackmate, вам решать, чтобы в массив попало всего 10 символов. – Dave
О, я не знал о cin.width, спасибо вам большое. Не стесняйтесь прокомментировать мой подход, если хотите. Также мне очень любопытно, почему дополнительная информация записывается в sendBuff? – user3394004