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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.05.2013, 16:42   #1
frommars
Форумчанин
 
Регистрация: 02.07.2011
Сообщений: 144
Восклицание [C] туплю - массив в строку

Приветствую!
Вот например, есть код:
Код:
#include <stdio.h>

int main()
{
	char a[6];
	int i;
		
		for(i = 0; i < 6; i++)
			a[i] = (char)i;
	
	printf("a: %lx\n", a);
	
return 0;
}
В результате в выводе будет ерунда, а если
Код:
	printf("a: %lx\n", a[0]);
то выведется 0, как и должно быть.
И вот собственно вопрос:
как преобразовать массив А таким образом, что бы можно было его вывести целиком, а не по индексам? Те что бы
Код:
	printf("a: %lx\n", a);
вывело 123456

Заранее спасибо!


P.S. если мысли по поводу sprintf, но пока ни к чему это ни привело.
P.S.2. при эксперементах со strncat программа падает.

Последний раз редактировалось frommars; 13.05.2013 в 16:49.
frommars вне форума Ответить с цитированием
Старый 13.05.2013, 17:06   #2
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,336
По умолчанию

2frommars
Код:
	printf("a: %lx\n", a);
ты адрес выводишь

это раз
Код:
#include <stdio.h>

#define SIZE 7

int main()
{
	char arr[SIZE];
	snprintf(arr, SIZE, "%d", 123456);
	printf("%s\n", arr);
	return 0;
}
это два
Код:
#include <stdio.h>

#define SIZE 7

int main()
{
	size_t i;
	char arr[SIZE] = { 0 };

	for (i = 0; i < SIZE - 1; i++)
		arr[i] = '0' + i + 1;

	printf("%s\n", arr);
	return 0;
}
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance
pproger вне форума Ответить с цитированием
Старый 13.05.2013, 17:11   #3
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Цитата:
В результате в выводе будет ерунда
Не ерунда, а значение переменной a.
Цитата:
как преобразовать массив А таким образом, что бы можно было его вывести целиком, а не по индексам?
Долго и сложно. Дело в том, что, когда printf видит спецификатор формата, соответствующий числу, она берёт очередной аргумент и преобразует его в текстовую строку, соответствующую представлению этого числа в соглашениях некоторой нотации и системе счисления. Я специально формулирую таким образом, чтобы Вы поняли, что это не тривиальное действие. Поэтому действия вида "взять массив чисел, и последовательно вывести результаты преобразования всех его элементов" в функцию printf не заложено, и подходящего спецификатора у неё нет. Вообще, единственное, что позволяет интерпретировать аргумент как указатель на массив - спецификатор %s. То есть, на вход надо подавать уже готовую C-строку (с нуль-терминатором на конце, напоминаю).
Так вот, в общем случае - т.е. если цикл идёт не до 6, а до произвольного значения, - это сделать долго и сложно. В Вашем случае можно сделать хак:
Код:
char ValueToSymbol(int val){
  static const char* digits = "0123456789";
  return digits[val]; //Например, при val=0, функция вернёт первый элемент digits - код символа '0'
}

//...
	char a[7]; //Плюс один символ для конца строки
	int i;
		
	for(i = 0; i < 6; i++)
		a[i] = ValueToSymbol(i);
	a[6] = '\0'; //Нуль-терминатор в конец
        
        printf("a: %s\n", a);//Вывели строку
Abstraction вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Массив в одну строку Egor.S C# (си шарп) 5 07.04.2013 21:28
Двунаправленный линейный список строк. Вставить строку, удалить строку и заменить строку tarasman11 Паскаль, Turbo Pascal, PascalABC.NET 4 05.07.2012 20:27
Char строку в int массив (C) Ael Общие вопросы C/C++ 6 06.11.2010 00:22
Разложить строку в массив Xcopy Общие вопросы Delphi 16 17.09.2009 09:04
Си++. Вставить в массив элемент в нужную строку hen Помощь студентам 10 08.06.2009 22:27