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

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

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

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

23.09.2013, 12:29. Просмотров 554. Ответов 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;
}
Почему выводится бред какой-то.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.09.2013, 12:29     Почему выводит бред
Посмотрите здесь:

_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...

Почему не выводит строки? - C++
Здравствуйте. Задание состоит в том,чтобы выделить имя,т.е второе слово строки (первое слово-фамилия). В массив строк вводится фамилия и...

Почему не выводит printf? - C++
#include &quot;stdafx.h&quot; #include &quot;iostream&quot; #include &quot;math.h&quot; #include &quot;locale.h&quot; using namespace std; void main() { ...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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[] неправильно записывалась строка.
Ilot
Модератор
Эксперт С++
1807 / 1164 / 226
Регистрация: 16.05.2013
Сообщений: 3,060
Записей в блоге: 5
Завершенные тесты: 1
23.09.2013, 12:54     Почему выводит бред #3
Что написали то и имеете. Вы возвращаете указатель на автоматическую переменную объявленную в ф-и. Не знаю для чего нужна эта программа, но как вариант попробуйте объявить s статической.
C++
1
    static char s[]="\\\\vmserver\\ОБЩЕЕ\\put.pdf";
Rivory, не забывайте про delete даже там где она явно не нужна. На бога надейся, а сам не плошай.

Добавлено через 5 минут
А вообще-то хотелось бы знать для чего предназначенна программа.
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, как говорится пока не столкнешься не поймешь. А я читал об этом. Что пользоваться данными переменных созданных в функции очень плохо, так как не понятно что они будут содержать после выхода из функции.
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.
alsav22
5416 / 4812 / 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;
}
Ilot
Модератор
Эксперт С++
1807 / 1164 / 226
Регистрация: 16.05.2013
Сообщений: 3,060
Записей в блоге: 5
Завершенные тесты: 1
23.09.2013, 13:12     Почему выводит бред #7
Ну так правильно вы массив не правильно удаляете.
C++
1
   delete [] s;
C++
1
2
    const char *y="as";
        y=rename();
Смысл разделения этих строк для меня остается загадкой... Зачем резервировать память для массива если вы им не собираетесь пользоваться?
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();
Смысл разделения этих строк для меня остается загадкой... Зачем резервировать память для массива если вы им не собираетесь пользоваться?
Это я эксперементировал, до того как создал пост. Потому, что не мог понять почему выводит бред. Сейчас как видите, этих строк нет уже.
castaway
Эксперт С++
4881 / 3017 / 370
Регистрация: 10.11.2010
Сообщений: 11,076
Записей в блоге: 10
Завершенные тесты: 1
23.09.2013, 15:00     Почему выводит бред #9
Цитата Сообщение от Ilot Посмотреть сообщение
Rivory, не забывайте про delete даже там где она явно не нужна. На бога надейся, а сам не плошай.
Какой тут может быть delete, если он память динамически нигде не выделяет?

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

Зачем давать советы в том, в чем вы сами не разбираетесь?
Ilot
Модератор
Эксперт С++
1807 / 1164 / 226
Регистрация: 16.05.2013
Сообщений: 3,060
Записей в блоге: 5
Завершенные тесты: 1
23.09.2013, 15:54     Почему выводит бред #10
Зачем давать советы в том, в чем вы сами не разбираетесь?
А вы что предлагаете сидеть на попе ровно? Я действительно только изучаю си поэтому и общаюсь на этом форуме. Всегда быть правым тяжело вы не находите? А минусовать по этому поводу подло. Я никого не оскорбляю, а пытаюсь помочь пусть при этом я не всегда оказываюсь правым. Свое мнение я не навязываю.
Так что это не красиво с вашей стороны ставить на вид какой вы у нас умный, а мы тут все так... погулять вышли. Написали бы просто, что ты мол товарищ не прав вот тут и вот тут и я был бы вам благодарен. А сейчас у меня складывается о вас не совсем хорошее мнение...
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;...

Почему выводит всегда 0? - C++
Почему при любом значении k выводится 0? #include &lt;iostream&gt; using namespace std; void main() { double k, j, i; ...

Почему float выводит 0.0 ? - C++
ПОЧЕМУ р ВЫВОДИТ =0.0 ????? int Rows, Cols; float p; printf(&quot;Vvedite kol-vo strok and colon&quot;); scanf(&quot;%d%d&quot;, &amp;Rows,...

Почему не выводит на экран - C++
#include &lt;iostream&gt; #include&lt;math.h&gt; using namespace std; int main() { int x; double f; cout&lt;&lt;&quot;Vvedite x: &quot;; cin&gt;&gt;x; ...

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


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

Или воспользуйтесь поиском по форуму:
castaway
Эксперт С++
4881 / 3017 / 370
Регистрация: 10.11.2010
Сообщений: 11,076
Записей в блоге: 10
Завершенные тесты: 1
23.09.2013, 16:00     Почему выводит бред #11
Цитата Сообщение от Ilot Посмотреть сообщение
Всегда быть правым тяжело вы не находите?
Не нахожу.
Цитата Сообщение от Ilot Посмотреть сообщение
А минусовать по этому поводу подло.
Подло давать заведомо не правильные советы, вы не находите?
Если вы заметили, то я не показывал насколько я умный.
А нехорошее мнение у вас обо мне складывается скорее всего потому, что вы не можете адекватно оценить ситуацию и понять свою ошибку.
Больше тут добавить нечего.
Yandex
Объявления
23.09.2013, 16:00     Почему выводит бред
Ответ Создать тему
Опции темы

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