Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.04.2013, 18:19   #1
Shelbanin
 
Регистрация: 29.04.2013
Сообщений: 3
По умолчанию Заполнение массива с использованием указателей

Необходимо заполлнить массив s[] с использовнием ничего не возвращающей функии и указателей.

Код:
#include <stdio.h>
#include <string>
 
using namespace std;
 
void fill_in(string *b, int c);
 
int main()
{
    string s[5];
    string *ps;
    ps=s;
    for (int i=0; i<5; i++)
    {
        fill_in(ps, i);
        printf("%s", s[i]);
    }
}
 
void fill_in(string *b, int c)
{
    string m;
    scanf("%s", m);
    *(b+c)=m;
}
Такой вариант не работает- в массиве содержатся после ввода какие-то левые символы... Может быть стоит попробывать реализовать не через string, а через char(пробывал создавать двумерный массив s[][], но возникается проблемы с указателями)
Shelbanin вне форума Ответить с цитированием
Старый 30.04.2013, 11:17   #2
Shelbanin
 
Регистрация: 29.04.2013
Сообщений: 3
По умолчанию

Подскажите пожалуйста
Shelbanin вне форума Ответить с цитированием
Старый 30.04.2013, 11:42   #3
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Цитата:
Подскажите пожалуйста
Спецификатор формата %s функции scanf/printf не имеет никакого отношения к типу std::string. Или так:
Код:
void fill_in(string *b, int c)
{
    string m;
    cin >> m;
    *(b+c)=m;
}
Или так (не рекомендуется):
Код:
void fill_in(char **b, int c)
{
    char m[MAX_STRING_LENGTH+1];
    scanf("%s", m);
    *(b+c)=m;
}
Abstraction вне форума Ответить с цитированием
Старый 30.04.2013, 18:46   #4
Shelbanin
 
Регистрация: 29.04.2013
Сообщений: 3
По умолчанию

Цитата:
Сообщение от Abstraction Посмотреть сообщение
Спецификатор формата %s функции scanf/printf не имеет никакого отношения к типу std::string. Или так:
Код:
void fill_in(string *b, int c)
{
    string m;
    cin >> m;
    *(b+c)=m;
}
Соответственно на вывод тогда использовать вместо printf cout<<?
Shelbanin вне форума Ответить с цитированием
Старый 02.05.2013, 18:41   #5
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Цитата:
Соответственно на вывод тогда использовать вместо printf cout<<?
std::string плохо совместим со старой системой ввода-вывода. Рекомендуется использование потока, но можно обойтись вызовом функции-члена c_str():
Код:
printf("%s", s[i]); //Нельзя!
std::cout << s[i]; //Можно
printf("%s", s[i].c_str()); //Тоже можно, c_str() возвращает C-строку
Abstraction вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
C++ надо написать программу с использованием указателей Al-chan Помощь студентам 5 24.02.2013 23:23
Язык C (Двумерные массивы с использованием указателей). Winsic Помощь студентам 0 25.03.2012 14:41
переписать задачу,с использованием указателей, C++ cold_water Помощь студентам 0 05.12.2011 18:21
АТД: Реализация списка с использованием указателей Suslik963 Помощь студентам 1 17.11.2010 10:06
Сортировка массива указателей Джед Общие вопросы C/C++ 3 02.06.2009 14:18