Имя пользователя:
Пароль:
 | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - [решено] Вывод массива char из функции

Ответить
Настройки темы
C/C++ - [решено] Вывод массива char из функции

Пользователь


Сообщения: 55
Благодарности: 0

Профиль | Отправить PM | Цитировать


Не получается вывести значения массива в main, который заполняется внутри функции. Вместо 'a' символов выводит случайные символы.
PHP код: Выделить весь код

#include <stdio.h> 
#include <stdlib.h> 

void f(char *cint *n

    *
n=10
    
c=(char*)malloc(*n+1); 
    for(
int i=0i<*ni++) 
    { 
        
c[i]='a'
    } 

int main() 

    
int a
    
char *c

    
f(c,&a); 
    for(
int i=0i<a+1i++) 
    { 
        
printf("%c",&c[i]); 
    } 
    
system("pause"); 



Отправлено: 08:42, 11-04-2016

 

Аватара для User001

Ветеран


Сообщения: 740
Благодарности: 116

Профиль | Отправить PM | Цитировать


Цитата kennydzzze:
void f(char *c, int *n)»
Надо передавать указатель на указатель, если вы хотите его изменять.
Код: Выделить весь код
void f(char **c, int *n)
Соответственно:
Цитата kennydzzze:
c=(char*)malloc(*n+1);»
Код: Выделить весь код
*c = (char*)malloc(*n+1);
Цитата kennydzzze:
c[i]='a';»
Код: Выделить весь код
(*c)[i]='a';
Тут в принципе неверно:
Цитата kennydzzze:
printf("%c",&c[i]);»
Код: Выделить весь код
printf("%c", c[i]);
А еще надо память и освобождать.

И основной вопрос - зачем вам вообще вся эта адресная арифметика?
Это сообщение посчитали полезным следующие участники:

Отправлено: 14:54, 11-04-2016 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Пользователь


Сообщения: 55
Благодарности: 0

Профиль | Отправить PM | Цитировать


Спасибо, помогло.

Цитата User001:
void f(char **c, int *n) »
Я думал так передаются двумерные динамические массивы, точнее указатели на них.

Цитата User001:
А еще надо память и освобождать. »
Это да, но тут не думаю, что это нужно, это как образец.

Цитата User001:
И основной вопрос - зачем вам вообще вся эта адресная арифметика? »
Пишу консольное приложение генератор паролей с функционалом.

п.с. в мейне я тогда должен передавать адрес одномерного массива в функцию? f(&c, &a);

Отправлено: 18:21, 11-04-2016 | #3


Аватара для User001

Ветеран


Сообщения: 740
Благодарности: 116

Профиль | Отправить PM | Цитировать


Цитата kennydzzze:
Я думал так передаются двумерные динамические массивы, точнее указатели на них. »
Смотря как вы используете это. В вашем случае была проблема - у вас есть переменная типа (char *) вы ее передаете в функцию (в ней это другая - локальная переменная) и внутри нее меняете значение. После выхода функции вы уже работаете с переменной, определенной в контексте метода main(), поэтому, значение не сохраняется.
Цитата kennydzzze:
Это да, но тут не думаю, что это нужно, это как образец. »
Привыкайте делать сразу. И продумайте где выделять память и где освобождать.
Цитата kennydzzze:
п.с. в мейне я тогда должен передавать адрес одномерного массива в функцию? f(&c, &a); »
Да.
Это сообщение посчитали полезным следующие участники:

Отправлено: 20:20, 11-04-2016 | #4


Пользователь


Сообщения: 55
Благодарности: 0

Профиль | Отправить PM | Цитировать


User001, Не могли бы вы прояснить ситуацию с передачей двумерных динамических массивов? Задача та же самая, нужно передать массив типа char, только уже двумерный, забить значениями и вывести его в main:
PHP код: Выделить весь код

#include <stdio.h> 
#include <stdlib.h> 

void f(char ***cint *n

    *
n=10;

    *
c=(char**)malloc(*n*sizeof(char*));
    for (
int i=0i<*ni++)
    {
        (*)
c[i]=(char*)malloc(5*sizeof(char));    //[Error] expected primary-expression before ')' token
    
}

   for(
int i=0i<*ni++)
    { 
        (*)
c[i]='a';    //[Error] expected primary-expression before ')' token
    
}

int main() 

    
int a=0
    
char **c

    
f(&c,&a);

    for(
int i=0i<ai++) 
    { 
        
printf("%s\n",c[i]); 
    } 

    for (
int i=0i<ai++)
    {
        
free(c[i]);
    }
    
free(c);
    
  
system("pause"); 


Код не компилируется, выводит ошибки на 11 и 16 строки(указал в комментариях кода). Компилятор dev-cpp 5.11

Отправлено: 17:49, 14-04-2016 | #5


Аватара для User001

Ветеран


Сообщения: 740
Благодарности: 116

Профиль | Отправить PM | Цитировать


Цитата kennydzzze:
(*)c[i]=(char*)malloc(5*sizeof(char)); »
(*c)[i]
Цитата kennydzzze:
(*)c[i]='a'; //[Error] expected primary-expression before ')' token »
(*c)[i][j]. Соответственно - внутренний цикл еще один нужен, т.к. массив 2-мерный.
Цитата kennydzzze:
printf("%s\n",c[i]); »
printf("%c\n", c[i][j]);

И почините оформление.
Это сообщение посчитали полезным следующие участники:

Отправлено: 07:38, 15-04-2016 | #6


Пользователь


Сообщения: 55
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата User001:
(*c)[i][j] »
Видимо я вчера совсем перенапрягся после учебы... Спасибо.

Цитата User001:
printf("%c\n", c[i][j]); »
Здесь не вижу никакой ошибки, %s выводит строку [i]. Все норм было.

Цитата User001:
И почините оформление. »
Какое оформление? Темы? Что не так с ним?

Отправлено: 11:49, 15-04-2016 | #7


Аватара для User001

Ветеран


Сообщения: 740
Благодарности: 116

Профиль | Отправить PM | Цитировать


Цитата kennydzzze:
Здесь не вижу никакой ошибки, %s выводит строку [i]. Все норм было. »
Я вашей задумки не знаю. Если это массив строк, то не забывайте +1 символ выделять для \0.
Цитата kennydzzze:
Какое оформление? Темы? Что не так с ним? »
Я про оформление кода: пробелы после for, константы (5) посреди кода и т.д.

Отправлено: 14:21, 15-04-2016 | #8



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - [решено] Вывод массива char из функции

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
C/C++ - помогите выполнить сортировку массива по убыванию и вывод результата lavrov.vjacheslav Программирование и базы данных 5 19-03-2015 07:35
C/C++ - [решено] cannot convert 'std::string {aka std::basic_string<char>}' to 'const char*' Acuna Программирование и базы данных 15 08-05-2014 15:52
PowerShell - Вывод нумерации элементов массива в консоль tarasov.evgeny Скриптовые языки администрирования Windows 0 12-04-2011 13:36
Вывод данных их массива venuko Вебмастеру 10 02-05-2010 17:19
[решено] PHP | Вывод массива в файл Coutty Вебмастеру 2 29-10-2008 08:48




 
Переход