Форум 3DNews

Форум 3DNews (http://forum.3dnews.ru/index.php)
-   Программирование (http://forum.3dnews.ru/forumdisplay.php?f=44)
-   -   вывод значений массива (http://forum.3dnews.ru/showthread.php?t=136641)

chajnik 10.04.2016 19:11

вывод значений массива
 
Нужно вывести значения массива типа 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");



garniv 10.04.2016 21:35

Расставь Watch'и по переменным, и построчно выполняй отладку - смотри когда содержимое какой-то переменной станет странным.

chajnik 10.04.2016 22:52

Ну проблема точно не в заполнении значениями, ибо если сделать вывод в функции, то все норм.

garniv 11.04.2016 00:06

Вложений: 1
Цитата:

Сообщение от chajnik (Сообщение 2543436)
Но вместо 'a' символов программа выводит %&'()*+,-./

А у меня выводятся сначала смайлики :смеюсь:


я закомментировал этот кусок
PHP код:

    for(int i=0i<*ni++)
    {
        
c[i]='a';
    } 

и... ничего не поменялось

chajnik 11.04.2016 07:16

garniv, потому что вывод изначально выводит фигню, если вывод убрать из main и дописать его в функцию, то будет выводится то, что нужно.
п.с. а что вы вообще хотели вывести, убрав цикл с заполнением массива?

garniv 11.04.2016 07:28

Цитата:

Сообщение от chajnik (Сообщение 2543505)
п.с. а что вы вообще хотели вывести, убрав цикл с заполнением массива?

а это был просто эксперимент :)

Цитата:

Сообщение от chajnik (Сообщение 2543505)
потому что вывод изначально выводит фигню, если вывод убрать из main и дописать его в функцию, то будет выводится то, что нужно

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

chajnik 11.04.2016 08:40

Цитата:

Сообщение от garniv (Сообщение 2543507)
т.е. можно предположить что проблема или в передаче значений массива из функции в main, или в самом выводе?

Скорее всего так и есть. Либо в передаче значений проблема, либо в выводе переданных значений.

garniv 11.04.2016 09:28

А покажи вариант который работает.

zl0dey4eg 11.04.2016 10:44

garniv, а что за IDE используешь и что за язык? ( С++)

chajnik 11.04.2016 10:59

Цитата:

Сообщение от garniv (Сообщение 2543541)
А покажи вариант который работает.

СПОЙЛЕР »
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"); 



garniv 11.04.2016 16:48

Вложений: 1
Как я понял,
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.

garniv 11.04.2016 17:16

И адреса получаются разными
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 (Сообщение 2543546)
а что за IDE используешь и что за язык? ( С++)

Я думаю что это С (без плюсов). IDE - на скриншоте там название даже с версией Dev-C++ 5.11 :)

chajnik 11.04.2016 18:24

Цитата:

Сообщение от garniv (Сообщение 2543618)
так и должно быть?

Нет, то что выводит программа в консоль у вас, это вывод в функции, а мне нужен был вывод в 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"); 



petushkov 11.05.2016 16:27

походу нужно все же лучше учить языки программирования )))))


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

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd. Перевод: zCarot