Форум 3DNews
Вернуться   Форум 3DNews > Программирование > Программирование

Ответ Создать новую тему
 
Опции темы Опции просмотра
Старый 10.04.2016, 19:11   [включить плавающее окно]   #1
chajnik
Мужской Продвинутый
Автор темы
 
Регистрация: 02.03.2011
вывод значений массива

Нужно вывести значения массива типа char, полученные в функции f, в 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");

chajnik вне форума  
Конфигурация ПК
Ответить с цитированием
Старый 10.04.2016, 21:35   [включить плавающее окно]   #2
garniv
Мужской Модератор
 
Аватар для garniv
 
Регистрация: 29.06.2004
Расставь Watch'и по переменным, и построчно выполняй отладку - смотри когда содержимое какой-то переменной станет странным.
__________________
Хочешь помочь новичку — делай вместе с ним. Хочешь помочь старику — делай вместо него. Хочешь помочь мастеру — отойди и не мешай. А хочешь помочь Таргитаю — сам Таргитай.
garniv вне форума  
Конфигурация ПК
Ответить с цитированием
Старый 10.04.2016, 22:52   [включить плавающее окно]   #3
chajnik
Мужской Продвинутый
Автор темы
 
Регистрация: 02.03.2011
Ну проблема точно не в заполнении значениями, ибо если сделать вывод в функции, то все норм.
chajnik вне форума  
Конфигурация ПК
Ответить с цитированием
Старый 11.04.2016, 00:06   [включить плавающее окно]   #4
garniv
Мужской Модератор
 
Аватар для garniv
 
Регистрация: 29.06.2004
Цитата (chajnik) »
Но вместо 'a' символов программа выводит %&'()*+,-./
А у меня выводятся сначала смайлики


я закомментировал этот кусок
PHP код:
    for(int i=0i<*ni++)
    {
        
c[i]='a';
    } 
и... ничего не поменялось
Миниатюры
Нажмите на изображение для увеличения
Название: Снимок.PNG
Просмотров: 89
Размер:	198.2 Кб
ID:	48756  
__________________
Хочешь помочь новичку — делай вместе с ним. Хочешь помочь старику — делай вместо него. Хочешь помочь мастеру — отойди и не мешай. А хочешь помочь Таргитаю — сам Таргитай.
garniv вне форума  
Конфигурация ПК
Ответить с цитированием
Старый 11.04.2016, 07:16   [включить плавающее окно]   #5
chajnik
Мужской Продвинутый
Автор темы
 
Регистрация: 02.03.2011
garniv, потому что вывод изначально выводит фигню, если вывод убрать из main и дописать его в функцию, то будет выводится то, что нужно.
п.с. а что вы вообще хотели вывести, убрав цикл с заполнением массива?
chajnik вне форума  
Конфигурация ПК
Ответить с цитированием
Старый 11.04.2016, 07:28   [включить плавающее окно]   #6
garniv
Мужской Модератор
 
Аватар для garniv
 
Регистрация: 29.06.2004
Цитата (chajnik) »
п.с. а что вы вообще хотели вывести, убрав цикл с заполнением массива?
а это был просто эксперимент

Цитата (chajnik) »
потому что вывод изначально выводит фигню, если вывод убрать из main и дописать его в функцию, то будет выводится то, что нужно
т.е. можно предположить что проблема или в передаче значений массива из функции в main, или в самом выводе?
__________________
Хочешь помочь новичку — делай вместе с ним. Хочешь помочь старику — делай вместо него. Хочешь помочь мастеру — отойди и не мешай. А хочешь помочь Таргитаю — сам Таргитай.
garniv вне форума  
Конфигурация ПК
Ответить с цитированием
Старый 11.04.2016, 08:40   [включить плавающее окно]   #7
chajnik
Мужской Продвинутый
Автор темы
 
Регистрация: 02.03.2011
Цитата (garniv) »
т.е. можно предположить что проблема или в передаче значений массива из функции в main, или в самом выводе?
Скорее всего так и есть. Либо в передаче значений проблема, либо в выводе переданных значений.
chajnik вне форума  
Конфигурация ПК
Ответить с цитированием
Старый 11.04.2016, 09:28   [включить плавающее окно]   #8
garniv
Мужской Модератор
 
Аватар для garniv
 
Регистрация: 29.06.2004
А покажи вариант который работает.
__________________
Хочешь помочь новичку — делай вместе с ним. Хочешь помочь старику — делай вместо него. Хочешь помочь мастеру — отойди и не мешай. А хочешь помочь Таргитаю — сам Таргитай.
garniv вне форума  
Конфигурация ПК
Ответить с цитированием
Старый 11.04.2016, 10:44   [включить плавающее окно]   #9
zl0dey4eg
Мужской Недосягаемый
 
Аватар для zl0dey4eg
 
Регистрация: 24.12.2012
Адрес: Москва
garniv, а что за IDE используешь и что за язык? ( С++)

Последний раз редактировалось zl0dey4eg; 11.04.2016 в 17:17.
zl0dey4eg вне форума  
Конфигурация ПК
Ответить с цитированием
Старый 11.04.2016, 10:59   [включить плавающее окно]   #10
chajnik
Мужской Продвинутый
Автор темы
 
Регистрация: 02.03.2011
Цитата (garniv) »
А покажи вариант который работает.
СПОЙЛЕР »
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';
        
printf("%c",c[i]);    // +++
    


int main() 

    
int a;
    
char *c;

    
f(c,&a);

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

    
system("pause"); 

chajnik вне форума  
Конфигурация ПК
Ответить с цитированием
Старый 11.04.2016, 16:48   [включить плавающее окно]   #11
garniv
Мужской Модератор
 
Аватар для garniv
 
Регистрация: 29.06.2004
Как я понял,
PHP код:
printf("%c",c[i]) 
и
PHP код:
printf("%c",&c[i]) 
это разные вещи. В первом это значение, а во втором случае ты выводишь адрес памяти (начало значения элемента массива).

Можно вывести их сразу в два столбца
PHP код:
printf("c[i]=%c, &c[i]=%p \n"c[i], &c[i]); 
В первом должны быть "а", но фактически выводится мусор. Т.е. массив из f не передается в main.
Миниатюры
Нажмите на изображение для увеличения
Название: Захват-1.png
Просмотров: 82
Размер:	50.7 Кб
ID:	48766  
__________________
Хочешь помочь новичку — делай вместе с ним. Хочешь помочь старику — делай вместо него. Хочешь помочь мастеру — отойди и не мешай. А хочешь помочь Таргитаю — сам Таргитай.

Последний раз редактировалось garniv; 11.04.2016 в 16:51.
garniv вне форума  
Конфигурация ПК
Ответить с цитированием
Старый 11.04.2016, 17:16   [включить плавающее окно]   #12
garniv
Мужской Модератор
 
Аватар для garniv
 
Регистрация: 29.06.2004
И адреса получаются разными
PHP код:
#include <stdio.h> 
#include <stdlib.h> 

void f(char *cint *n

    *
n=20

    
c=(char*)malloc(*n+1); 

    for(
int i=0i<*ni++) 
    { 
        
c[i]='a'
        
printf("c[i]=%c, &c[i]=%p \n"c[i], &c[i]);
    } 
    
printf("\n");

int main() 

    
int a
    
char *c

    
f(c,&a); 

    for(
int i=0i<a+1i++) 
    { 
 
//       printf("%p \n",&c[i]); 
        
printf("c[i]=%c, &c[i]=%p \n"c[i], &c[i]);
    } 

//    system("pause"); 

так и должно быть?

Добавлено через 12 минут

Цитата (zl0dey4eg) »
а что за IDE используешь и что за язык? ( С++)
Я думаю что это С (без плюсов). IDE - на скриншоте там название даже с версией Dev-C++ 5.11
__________________
Хочешь помочь новичку — делай вместе с ним. Хочешь помочь старику — делай вместо него. Хочешь помочь мастеру — отойди и не мешай. А хочешь помочь Таргитаю — сам Таргитай.

Последний раз редактировалось garniv; 11.04.2016 в 17:24.
garniv вне форума  
Конфигурация ПК
Ответить с цитированием
Старый 11.04.2016, 18:24   [включить плавающее окно]   #13
chajnik
Мужской Продвинутый
Автор темы
 
Регистрация: 02.03.2011
Цитата (garniv) »
так и должно быть?
Нет, то что выводит программа в консоль у вас, это вывод в функции, а мне нужен был вывод в maine. Мне тут подсказали, вот рабочий код
СПОЙЛЕР »
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=0
    
char *c

    
f(&c,&a);

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

  
system("pause"); 

chajnik вне форума  
Конфигурация ПК
Ответить с цитированием
Старый 11.05.2016, 16:27   [включить плавающее окно]   #14
petushkov
Мужской Новенький
 
Регистрация: 11.05.2016
походу нужно все же лучше учить языки программирования )))))
petushkov вне форума  
Ответить с цитированием
Ответ Создать новую тему

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Текущее время: 18:06. Часовой пояс GMT +3.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 2000-2017 3DNews. All Rights Reserved.
Администрация 3DNews требует соблюдения на форуме правил и законов РФ
Серверы размещены в Hostkey