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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.11.2019, 16:09   #1
Vasssya
 
Регистрация: 07.11.2019
Сообщений: 4
Вопрос Выводит символы вместо чисел

Не знаю в чем проблема. Изменил размер на 256 -- исчезли МММММ...Теперь консоль выдает набор неизвестный символов, вместо массива символов. Вот код. Как исправить? Я новичек, можно подробнее об ошибках
Код:
char* strcat1(const char* stringer_1,const  char* s2)
{
	char vernet_stringer[255] = { NULL };
	for (int i = 0; i < strlen(stringer_1); ++i)
	{
		vernet_stringer[i] = stringer_1[i];
	}
	int length_1 = (signed)strlen(stringer_1);
	int length_2 = (signed)strlen(s2);
	for (int i = 0; i <= length_2; ++i)
		vernet_stringer[length_1 + i] = s2[i];
	vernet_stringer[length_1 + length_2] = '\0';
	return vernet_stringer;
}

char* strcat2(const char* stringer_1, const char* s2)
{
	char vernet_stringer[255] = { NULL };
	for (int i = 0; i < strlen(stringer_1); ++i)
	{
		vernet_stringer[i] = stringer_1[i];
	}
	int length_1 = (signed)strlen(stringer_1);
	int length_2 = (signed)strlen(s2);
	int i = 0;
	do {
		vernet_stringer [length_1 + i] = *(s2 + i);
		++i;
	} while (i <= (signed)strlen(s2));
	vernet_stringer[length_1 + length_2] = '\0';
	return vernet_stringer;
}

char* strcat3(const char* stringer_1, const char* s2)
{
	char vernet_stringer[255] = { NULL };
	for (int i = 0; i < strlen(stringer_1); ++i)
	{
		vernet_stringer[i] = stringer_1[i];
	}
	int i = -1;
	int str_len_s1 = (signed)strlen(stringer_1);
	while ((++i) <= (signed)strlen(s2))
		vernet_stringer[str_len_s1 + i] = *(s2 + i);
	return vernet_stringer;
}

char* strcat4(const char* stringer_1, const char* stringer_2)
{
	char vernet_stringer[255] = { NULL };
	for (int i = 0; i < strlen(stringer_1); ++i)
	{
		vernet_stringer[i] = stringer_1[i];
	}
	const char* s = stringer_1 + (signed)strlen(stringer_1);
	for (int i = 0; i <= (signed)strlen(stringer_2); ++i)
		vernet_stringer[i] = stringer_2 [i];
	return vernet_stringer;
}
.......
Тут меин и просто добавление русских символов
........
typedef char* (*Pfsix)(const char*, const char*);
		Pfsix f_six[4] = { strcat1, strcat2, strcat2, strcat4 };

		const char* stringer_1[] = { "012"};
		const char* stringer_2[] = { "012"};
		int n = sizeof(stringer_1) / sizeof(char*);

		for (int i = 0; i < n; ++i)
		{
			printf("Тест %d \n", i + 1);
			for (int j = 0; j < 4; ++j)
			{
				printf("strpos%d("%s|\%s") = ", j + 1, stringer_1[i], stringer_2[i]); 
				printf(f_six[j](stringer_1[i], stringer_2[i])); printf("\n");
			}
		}

Последний раз редактировалось ACE Valery; 08.11.2019 в 19:18.
Vasssya вне форума Ответить с цитированием
Старый 07.11.2019, 16:17   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,707
По умолчанию

1. Не возвращайте указтель на локальные переменные
2. Почему в одном случает вы < strlen, а в другом <= strlen ?
3.
Код:
int n = sizeof(stringer_1) / sizeof(char*);
Угадайте сколько это будет.
p51x вне форума Ответить с цитированием
Старый 07.11.2019, 17:39   #3
Vasssya
 
Регистрация: 07.11.2019
Сообщений: 4
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
1. Не возвращайте указтель на локальные переменные
2. Почему в одном случает вы < strlen, а в другом <= strlen ?
3.
Код:
int n = sizeof(stringer_1) / sizeof(char*);
Угадайте сколько это будет.
Понимаю что вы хотели сказать цитатой, но не понимаю взаимосвязанной логики в трех пунктах. Можете подробнее или перефразировать как-то?
Vasssya вне форума Ответить с цитированием
Старый 07.11.2019, 17:50   #4
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,707
По умолчанию

Что именно непонятно?
1. Локальные данные будут уничтожены после выхода из функции. Сылки или указатели на них могу давать веселые эффекты.
2.
Код:
for (int i = 0; i < strlen(stringer_1); ++i)
Код:
int length_2 = (signed)strlen(s2);
for (int i = 0; i <= length_2; ++i)
и т.д.
p51x вне форума Ответить с цитированием
Старый 07.11.2019, 18:03   #5
Vasssya
 
Регистрация: 07.11.2019
Сообщений: 4
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
Что именно непонятно?
1. Локальные данные будут уничтожены после выхода из функции. Сылки или указатели на них могу давать веселые эффекты.
2.
Код:
for (int i = 0; i < strlen(stringer_1); ++i)
Код:
int length_2 = (signed)strlen(s2);
for (int i = 0; i <= length_2; ++i)
и т.д.
Cпасибо, первый пункт помог
Vasssya вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Выводит 1 последнюю картинку из массива вместо всех MariaD PHP 5 25.06.2015 15:12
Вместо массива выводит большие отрицательные числа IgoreKMaN Общие вопросы C/C++ 1 31.03.2014 15:17
Вместо русского текста символы - после переустановки Windows в файлах мусор вместо русских букв. МАРИННН Windows 14 13.10.2013 08:53
Вместо букв выводит не понятные символы IgoreKMaN Visual C++ 7 06.04.2013 17:54
Не выводит символы MattShepard Общие вопросы C/C++ 2 12.01.2011 11:07