Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/6: Рейтинг темы: голосов - 6, средняя оценка - 4.50
быдлокодер
 Аватар для kravam
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,701

Не создаётся объект string на ровном месте! Почему?

19.10.2011, 12:33. Показов 1279. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Ребята, чё-то я не пойму:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <string>
#include <stdio.h>
#include <iostream>
using namespace std;
 
int main () {
 char buff[1024]= "cafebabe";
 
 string strPID (string(buff));
// string strPID (string("cafebabe"));
 cout<< strPID << endl; 
 
 getchar (); 
 return 0;
}
Ни фига не вижу вожделенного вывода cafebabe, вместо этого выводится какая-то таинственная 1! Сам не справляюсь, помогите, кто может!
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
19.10.2011, 12:33
Ответы с готовыми решениями:

Деление чисел. Ошибка на ровном месте. Не пойму почему.
Пишу задачу, где нужно вычислить простое выражение. И возникает проблема при делении 1 на другие числа. Код ниже: //вычисление формулы ...

считываю текстовый файл в строку, программа вылетает на ровном месте, почему?
Друзья! Вот код #include &lt;windows.h&gt; #include &lt;vector&gt; #include &lt;iostream&gt; #include &lt;fstream&gt; #include &lt;stdio.h&gt; #include...

Почему два раза создаётся объект с ОДНИМ И ТЕМ ЖЕ ИМЕНЕМ?
#include &lt;windows.h&gt; #include &lt;iostream&gt; using namespace std; class arr{ public: arr(){ cout &lt;&lt; &quot;Вызов конструктора по...

9
Эксперт С++
 Аватар для Nameless One
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
19.10.2011, 12:38
9 строка, если я не ошибаюсь, интерпретируется как объявление функции. Делай так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
#include <string>
 
int main()
{
    const char* str = "foo";
    
    std::string string = std::string(str);
    // или так
    // std::string string(str)
 
    std::cout << string << std::endl;
    
    return 0;
}
А компилятор тебе ворнинги не писал разве?
1
Каратель
Эксперт С++
6610 / 4029 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
19.10.2011, 12:42
Цитата Сообщение от kravam Посмотреть сообщение
C++
1
string strPID (string(buff));
в 10-й студии такое даже не компилится
0
ниначмуроФ
 Аватар для PointsEqual
851 / 535 / 110
Регистрация: 12.10.2009
Сообщений: 1,913
19.10.2011, 12:44
C++
1
string strPID  ((string)(buff));
так выводится
1
Эксперт С++
 Аватар для Nameless One
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
19.10.2011, 12:44
Цитата Сообщение от Nameless One Посмотреть сообщение
интерпретируется как объявление функции
таки да:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
#include <string>
 
int main()
{
    const char* str = "foo";
    
    std::string string (std::string(str));
 
    std::cout << string << std::endl;
    
    return 0;
}
Code
1
2
3
4
5
6
7
8
9
10
11
-*- mode: compilation; default-directory: "/home/nameless/samples/cpp/" -*-
Compilation started at Wed Oct 19 19:44:23
 
make
g++ -c -Wall -g  main.cc
main.cc: В функции «int main()»:
main.cc:10:18: предупреждение: the address of «std::string string(std::string)» will always evaluate as «true» [-Waddress]
main.cc:6:17: предупреждение: неиспользуемая переменная «str» [-Wunused-variable]
g++ -o sample  main.o
 
Compilation finished at Wed Oct 19 19:44:23
0
быдлокодер
 Аватар для kravam
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,701
19.10.2011, 12:45  [ТС]
Это плохо, что оно не компилится, g++ версии 3.4.2 и 4.5.0 проглатывают на ура
......................
Nameless One, никаких предупреждений. Я бы безговорочно согласился с вами, если бы не одно но. В строке
string strPID (string(buff));

вот это вот
string(buff);
не может трактоваться как список параметров.
...И да, как сделать по-другому, я знаю хотелось бы с этим разобраться.
0
Эксперт С++
 Аватар для Nameless One
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
19.10.2011, 12:48
Цитата Сообщение от kravam Посмотреть сообщение
вот это вот
string(buff);
не может трактоваться как список параметров.
c чего ты взял? Тебя смущают скобки вокруг buff? Ну тогда взгляни на следующий (рабочий) код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
#include <string>
 
int foo(int(j))
{
    return j;
}
 
int main()
{
    std::cout << foo(3) << std::endl;
    
    return 0;
}
0
Эксперт С++
 Аватар для Nameless One
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
19.10.2011, 12:50
Цитата Сообщение от kravam Посмотреть сообщение
Nameless One, никаких предупреждений
компилируй с -Wall
1
быдлокодер
 Аватар для kravam
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,701
19.10.2011, 13:28  [ТС]
Nameless One, скобки не смущают, смущает имя переменной, она же уже вроде как объявлена! Вот случай попроще:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <stdio.h>
using namespace std;
 
int main () {
 
 int k= 89;
 
 //Тут надо бы компилятору ругнуться, ибо k уже объявлена;
 //Если бы k была объявлена внутри КАКИХ-НИБУДЬ фигурных скобок, вопросов бы не возникло
 //а так вроде как конфликт имён должен быть
 int rr (char k);
 
 
 //ПИшу чтобы -Wall не давала о себе знать
 printf ("k= %d\n", k);
 
 getchar (); 
 return 0;
}
Всё решалось бы, если бы компилятор запрещал бы объявлять функции внутри других функций! Их и так никто никогда не объявляет, а если бы ещё на это и ругалось, то и у меня бы ругнулось и всё было бы хорошо!

Добавлено через 2 минуты
И вопрос: что у вас за IDE или компилятор, что предупреждения на русском выводятся?
0
Эксперт С++
 Аватар для Nameless One
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
19.10.2011, 13:45
Цитата Сообщение от kravam Посмотреть сообщение
скобки не смущают, смущает имя переменной, она же уже вроде как объявлена!
Ну а в списке параметров функции вводится формальный параметр. Почему должна быть ошибка? Вот тебе аналогичная ситуация для примера:
C++
1
2
3
4
5
6
7
8
9
10
11
#include <iostream>
 
int j = 3;
 
// int j уже объявлена? будет ошибка компиляции?
int foo(int(j));
 
int main()
{
    return 0;
}
Цитата Сообщение от kravam Посмотреть сообщение
И вопрос: что у вас за IDE или компилятор, что предупреждения на русском выводятся?
emacs + gcc

Добавлено через 59 секунд
g++ (GCC) 4.6.1 20110908 (Red Hat 4.6.1-9)
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
19.10.2011, 13:45
Помогаю со студенческими работами здесь

Почему при инициализации строки, сначала создаётся пустой объект?
Чтобы при создании присвоить строке какое-то значение, можно использовать два способа: string str1(”bla-bla-bla”); или string str2 =...

Segfault на ровном месте
Доброго времени суток. Пишу достаточно простую программку под Linux. Вот кусок кода в котором вылазит ошибка сегментации: void...

Ошибки на ровном месте (VS2010)
В общем, сделал класс разбитый на два файла (.h и .cpp). Часть методов этого класса определена прямо в его теле при его объявлении (т.е. в...

Функция VirtualProtect возвращает false на ровном месте, почему?
А ведь и надо-то просто-напросто установить атрибуты на уже имеющиеся страницы памяти... Ну короче, есть СВОЯ dll ничё из себя не...

Почему создаётся пустой объект
Всем привет. Я новичок в Unity, но неплохо знаю C#. Я пишу вот такой скрипт. using UnityEngine; using System.Collections; ...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru