Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
Peperovich
43 / 43 / 4
Регистрация: 17.05.2011
Сообщений: 162
#1

Почему выводит бред - C++

23.09.2013, 12:29. Просмотров 557. Ответов 10
Метки нет (Все метки)

Имеется следующий код

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream> 
#include <locale>
 
using namespace std;
 
 const char* rename()
{
    char s[]="\\\\vmserver\\ОБЩЕЕ\\put.pdf";
    const char *temp=s;
    return temp;
}
 
int main() 
{ 
        locale::global(locale("rus"));
    const char *y=rename();
    for(int i=0;i<=2;i++)
    cout<<y[i];
    return 0;
}
Почему выводится бред какой-то.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.09.2013, 12:29
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Почему выводит бред (C++):

_getch() в цикле выводит бред вместо русских букв - C++
Извращался тут с getch(), возникла небольшая, но странная (для меня) проблема. В программе такого рода char x; x=_getch(); cout&lt;&lt;x;...

Почему не выводит m? - C++
С начала суток прошло N секунд (N — целое). Найти количество полных минут, прошедших с начала суток. #include &lt;iostream&gt; #include...

Почему не выводит? - C++
В одномерном массиве все отрицательные элементы переместить в начало массива, а остальные — в конец с сохранением порядка следования....

почему выводит 0? - C++
Даны неотрицательные целые числа a, b. Найти F(a, b), где F=(M!+N!)/(M+N)! #include &lt;iostream&gt; using namespace std; int fact(int...

почему выводит 0? - C++
Даны неотрицательные целые числа a, b. Найти F(a, b), где F=(M!+N!)/(M+N)! #include &lt;iostream&gt; using namespace std; int fact(int...

почему float выводит 0 ? - C++
машинный нуль или в чем проблема? for(i=0; i&lt;k; i++) { t=t*2; } p=(1/t); ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Rivory
146 / 112 / 2
Регистрация: 15.01.2013
Сообщений: 266
23.09.2013, 12:43 #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
using namespace std;
 
const char* rename()
{
    char* s = new char[100];
    s = "\\\\vmserver\\ОБЩЕЕ\\put.pdf";
    const char* temp = s;
    return temp;
}
 
int _tmain(int argc, _TCHAR* argv[])
{
    locale::global(locale("rus"));
    const char* y = rename();
    for(int i = 0; i <= 23;i++)
        cout<<y[i];
    system("pause");
    return 0;
}
Работает. Почему Ваш вариант не работал, я так и не разобрался, возможно кто-то более опытный пояснит, но проблема была в том, что в массив s[] неправильно записывалась строка.
0
Ilot
Модератор
Эксперт С++
1811 / 1168 / 229
Регистрация: 16.05.2013
Сообщений: 3,082
Записей в блоге: 5
Завершенные тесты: 1
23.09.2013, 12:54 #3
Что написали то и имеете. Вы возвращаете указатель на автоматическую переменную объявленную в ф-и. Не знаю для чего нужна эта программа, но как вариант попробуйте объявить s статической.
C++
1
    static char s[]="\\\\vmserver\\ОБЩЕЕ\\put.pdf";
Rivory, не забывайте про delete даже там где она явно не нужна. На бога надейся, а сам не плошай.

Добавлено через 5 минут
А вообще-то хотелось бы знать для чего предназначенна программа.
1
Peperovich
43 / 43 / 4
Регистрация: 17.05.2011
Сообщений: 162
23.09.2013, 13:01  [ТС] #4
Вообще это не полный код программы, сама программа вот:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <iostream> 
#include <fstream>
#include <locale>
 
using namespace std;
 const char* rename()
{
    char s[]="\\\\vmserver\\ОБЩЕЕ\\pu23t.pdf";
    const char *temp=s;
    return temp;
}
 
int main() 
{ 
    locale::global(locale("rus"));
    const char *y="as";
        y=rename();
    for(int i=0;i<=2;i++)
    cout<<y[i];
    ofstream to("\\\\vmserver\\ОБЩЕЕ\\put.pdf",ios::binary);
    ifstream from("C:\\Users\\Kirill\\Desktop\\Книги\\Unix\\Advanced Bash-Scripting Guide.pdf",ios::binary);
    char ch;
    while (from.get(ch)) to.put(ch);
    to.close(); 
    return 0;
}
Как можно догадаться (или нельзя), но я написал функцию для того чтобы менять имя файла в переменной to. А там путь задается именно const char *. Ну сама функция конечно же не дописана.

static все исправил. Да, спасибо Ilot, как говорится пока не столкнешься не поймешь. А я читал об этом. Что пользоваться данными переменных созданных в функции очень плохо, так как не понятно что они будут содержать после выхода из функции.
0
Rivory
146 / 112 / 2
Регистрация: 15.01.2013
Сообщений: 266
23.09.2013, 13:05 #5
Цитата Сообщение от Ilot Посмотреть сообщение
Rivory, не забывайте про delete даже там где она явно не нужна. На бога надейся, а сам не плошай.
Самое интересное, что я не забыл про delete, но когда я его писал
C++
1
2
3
4
5
6
7
8
const char* rename()
{
    char* s = new char[100];
    s = "\\\\vmserver\\ОБЩЕЕ\\put.pdf";
    const char* temp = s;
    delete s;
    return temp;
}
У меня вылетал Access violation.
0
alsav22
5420 / 4816 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
23.09.2013, 13:09 #6
Цитата Сообщение от Peperovich Посмотреть сообщение
я написал функцию для того чтобы менять имя файла в переменной to.
Если таким способом решили, то вот:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <iostream> 
#include <fstream>
#include <locale>
 
using namespace std;
 const char* rename()
{
    const char *temp = "\\\\vmserver\\ОБЩЕЕ\\pu23t.pdf";
    return temp;
}
 
int main() 
{ 
    locale::global(locale("rus"));
    const char *y="as";
        y=rename();
    for(int i=0;i<=2;i++)
    cout<<y[i];
    ofstream to("\\\\vmserver\\ОБЩЕЕ\\put.pdf",ios::binary);
    ifstream from("C:\\Users\\Kirill\\Desktop\\Книги\\Unix\\Advanced Bash-Scripting Guide.pdf",ios::binary);
    char ch;
    while (from.get(ch)) to.put(ch);
    to.close(); 
    return 0;
}
0
Ilot
Модератор
Эксперт С++
1811 / 1168 / 229
Регистрация: 16.05.2013
Сообщений: 3,082
Записей в блоге: 5
Завершенные тесты: 1
23.09.2013, 13:12 #7
Ну так правильно вы массив не правильно удаляете.
C++
1
   delete [] s;
C++
1
2
    const char *y="as";
        y=rename();
Смысл разделения этих строк для меня остается загадкой... Зачем резервировать память для массива если вы им не собираетесь пользоваться?
0
Peperovich
43 / 43 / 4
Регистрация: 17.05.2011
Сообщений: 162
23.09.2013, 13:18  [ТС] #8
Вот законченная версия того, что мне нужно было.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include <iostream> 
#include <fstream>
#include <locale>
#include <time.h>
 
 
using namespace std;
 const char* rename()
{
    static char s[]="\\\\vmserver\\ОБЩЕЕ\\put.pdf";
    int i=rand()%10+1;
    s[18]=static_cast<char>(i+'0');
    const char *temp=s;
    return temp;
}
 
int main() 
{ 
    locale::global(locale("rus"));
    while(1)
    {
    ofstream to(rename(),ios::binary);
    ifstream from("C:\\Users\\Kirill\\Desktop\\Книги\\Unix\\Advanced Bash-Scripting Guide.pdf",ios::binary);
    char ch;
    while (from.get(ch)) to.put(ch);
    to.close(); 
    }
    return 0;
}
Добавлено через 5 минут
Цитата Сообщение от Ilot Посмотреть сообщение
Ну так правильно вы массив не правильно удаляете.
C++
1
   delete [] s;
C++
1
2
    const char *y="as";
        y=rename();
Смысл разделения этих строк для меня остается загадкой... Зачем резервировать память для массива если вы им не собираетесь пользоваться?
Это я эксперементировал, до того как создал пост. Потому, что не мог понять почему выводит бред. Сейчас как видите, этих строк нет уже.
0
castaway
Эксперт С++
4884 / 3020 / 370
Регистрация: 10.11.2010
Сообщений: 11,078
Записей в блоге: 10
Завершенные тесты: 1
23.09.2013, 15:00 #9
Цитата Сообщение от Ilot Посмотреть сообщение
Rivory, не забывайте про delete даже там где она явно не нужна. На бога надейся, а сам не плошай.
Какой тут может быть delete, если он память динамически нигде не выделяет?

Цитата Сообщение от Ilot Посмотреть сообщение
Ну так правильно вы массив не правильно удаляете.
Он возвращает освобожденный указатель, вот в чем проблема.

Зачем давать советы в том, в чем вы сами не разбираетесь?
0
Ilot
Модератор
Эксперт С++
1811 / 1168 / 229
Регистрация: 16.05.2013
Сообщений: 3,082
Записей в блоге: 5
Завершенные тесты: 1
23.09.2013, 15:54 #10
Зачем давать советы в том, в чем вы сами не разбираетесь?
А вы что предлагаете сидеть на попе ровно? Я действительно только изучаю си поэтому и общаюсь на этом форуме. Всегда быть правым тяжело вы не находите? А минусовать по этому поводу подло. Я никого не оскорбляю, а пытаюсь помочь пусть при этом я не всегда оказываюсь правым. Свое мнение я не навязываю.
Так что это не красиво с вашей стороны ставить на вид какой вы у нас умный, а мы тут все так... погулять вышли. Написали бы просто, что ты мол товарищ не прав вот тут и вот тут и я был бы вам благодарен. А сейчас у меня складывается о вас не совсем хорошее мнение...
1
castaway
Эксперт С++
4884 / 3020 / 370
Регистрация: 10.11.2010
Сообщений: 11,078
Записей в блоге: 10
Завершенные тесты: 1
23.09.2013, 16:00 #11
Цитата Сообщение от Ilot Посмотреть сообщение
Всегда быть правым тяжело вы не находите?
Не нахожу.
Цитата Сообщение от Ilot Посмотреть сообщение
А минусовать по этому поводу подло.
Подло давать заведомо не правильные советы, вы не находите?
Если вы заметили, то я не показывал насколько я умный.
А нехорошее мнение у вас обо мне складывается скорее всего потому, что вы не можете адекватно оценить ситуацию и понять свою ошибку.
Больше тут добавить нечего.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.09.2013, 16:00
Привет! Вот еще темы с ответами:

Почему выводит нули?! - C++
Должно же перемножать. Почему выводит нули?! long double fact(int N) { if (N &lt; 0) return 0; if (N == 0) return 1;...

Почему выводит нули? #c++ - C++
int i; int p = 1; for(i=1; i&lt;=n+1; i++){ x = (1/2)*(cos((2*i+5)/(18*(n+1))) + l); cout&lt;&lt;x&lt;&lt;&quot;\n&quot;; p++; }; n объявлено...

Почему выводит адреса? - C++
Всем привет! Программа работает, но почему то выводит данные вместе с адресом (см. скриншот). Скажите, почему так? #include&lt;iostream&gt; ...

почему выводит смайлики? - C++
Драсте. У меня в программе вводится дата и события и потом идет сортировка и вывод. Я всьо сделал но на выводе вместо дат вывотит типа &quot;☺ ☻...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
23.09.2013, 16:00
Ответ Создать тему
Опции темы

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