С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
D_Ok
44 / 33 / 12
Регистрация: 11.02.2014
Сообщений: 134
#1

Неправильный вывод в строке типа char - C++

21.04.2014, 23:52. Просмотров 384. Ответов 8
Метки нет (Все метки)

C++
1
2
3
4
char * word = new char [5];
    for (int i = 0; i < 5 - 1; i++)
        word[i] = 'a';
    cout <<  word << endl;
почему кроме 4-х а выводится еще какой-то мусор? помогите разобраться...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.04.2014, 23:52
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Неправильный вывод в строке типа char (C++):

Сортировка цифр в строке типа char - C++
Здравствуйте! Помогите, пожалуйста, дописать программу. Прогррамма должна сортировать буквы или цифры во введенной строке. Например...

Поиск объекта в классе по строке типа char - C++
Есть такая задача : Описать класс с именем PRICE, содержащий следующие поля: - название товара; - название магазина, в котором...

Проверить правильность ввода в строке типа char - C++
Здравствуйте. Такой вопрос: Есть строковый массив и запись в него, но как при этом проверить все это дело на содержание в нем, либо при...

Вывод переменной типа char - C++
Переменная x типа char. x = 65; cout &lt;&lt; x; Так выводиться &quot;A&quot;. x = 64; cout &lt;&lt; x+1;

Как изменить первые 5 байт в строке типа char - C++
Ламерский вопрос! Есть строка,как изменить в ней первые 5 байт, в них должна храниться длина строки

Замена одного слова на другое в строке типа char - C++
Замена одного символа на другой в строке типа char - C++ Вообщем есть массив символов char str = &quot;abcafgh&quot;; нужно все &quot;a&quot; заменить...

8
Vaiz
104 / 98 / 30
Регистрация: 01.07.2012
Сообщений: 277
Завершенные тесты: 1
21.04.2014, 23:58 #2
word[4] = 0; // конец строки
1
DoOj
3 / 3 / 0
Регистрация: 28.03.2014
Сообщений: 38
22.04.2014, 00:01 #3
D_Ok, не знаю что вы курите, но у меня все нормально
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <cstdlib>
#include <iostream>
 
using namespace std;
 
int main(){
    
char * word = new char [5];
    for (int i = 0; i < 5 - 1; i++)
        word[i] = 'a';
    cout <<  word << endl;
    return 0;
}
0
D_Ok
44 / 33 / 12
Регистрация: 11.02.2014
Сообщений: 134
22.04.2014, 00:05  [ТС] #4
Цитата Сообщение от Vaiz Посмотреть сообщение
word[4] = 0 // конец строки
да я это знаю, просто думал что нулевой символ сам добавился бы, как это было бы при присвоение массиву полностью строки. Присвоил последнему элементу нулевой символ, помогло.
0
ValeryS
Модератор
6729 / 5138 / 485
Регистрация: 14.02.2011
Сообщений: 17,259
22.04.2014, 00:07 #5
Цитата Сообщение от DoOj Посмотреть сообщение
не знаю что вы курите, но у меня все нормально
повезло
Цитата Сообщение от D_Ok Посмотреть сообщение
почему кроме 4-х а выводится еще какой-то мусор? помогите разобраться...
потому что нет конца строки( завершающий 0) и выводится все что есть в памяти пока не встретится 0
поэтому самому нужно вписать 0 в нужное место
о чем и было написано
Цитата Сообщение от Vaiz Посмотреть сообщение
word[4] = 0; // конец строки
DoOj, а память освобождать не нужно?

Добавлено через 1 минуту
Цитата Сообщение от D_Ok Посмотреть сообщение
да я это знаю, просто думал что нулевой символ сам добавился бы,
это с чего бы?
1
D_Ok
44 / 33 / 12
Регистрация: 11.02.2014
Сообщений: 134
22.04.2014, 00:07  [ТС] #6
Цитата Сообщение от DoOj Посмотреть сообщение
D_Ok, не знаю что вы курите, но у меня все нормально
значит вам повезло, и сразу встретился 0, протестируйте еще...
0
Aloir
218 / 218 / 13
Регистрация: 17.12.2010
Сообщений: 693
22.04.2014, 00:09 #7
DoOj, вы смотрите в дебаге и у вас скорее всего компилятор обнуляет используемую память, в релизе же будет не предсказуемый результат.

D_Ok, добавить '\0' как посоветовал Vaiz, а еще советую инициализировать память
C++
1
memset(str,0,strlen(str));
.. да и вообще все переменные. в будущем облегчит жизнь
1
ValeryS
Модератор
6729 / 5138 / 485
Регистрация: 14.02.2011
Сообщений: 17,259
22.04.2014, 00:11 #8
Цитата Сообщение от Aloir Посмотреть сообщение
memset(sss,0,strlen(sss));
а strlen(sss) какое число вернет у не инициализированной памяти?
0
Aloir
218 / 218 / 13
Регистрация: 17.12.2010
Сообщений: 693
22.04.2014, 00:14 #9
ValeryS, вай, точно. короче размер туда!)

Не по теме:

надо заканчивать делать несколько дел одновременно сколько уже от этого страдаю ..

0
22.04.2014, 00:14
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.04.2014, 00:14
Привет! Вот еще темы с ответами:

Вывод адреса переменной типа char - C++
Всем привет! Хочу задать вопрос... есть код: #include &lt;iostream&gt; int main() { char ch = 'h'; char* p = &amp;ch;

Вывод элемента массива типа char - C++
Объясните кто знает почему когда я вывожу i-й элемент массива посредством cout все отлично а когда printf то выдает ошибку: Тут все...

Аргумент типа char** не совместим с параметром типа const char* - C++
Программа должна позволять заносить в структуру данные и выводить на экран информацию о поездах, следующих до определенной станции: ...

Аргумент типа char (*)[1000] несовместим с параметром типа char** - C++
Здравствуйте! Есть вот такая структура: #define max 1000 struct expr { char s; int index; };


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.