powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / обьясните плз, в чем ошибка?
6 сообщений из 6, страница 1 из 1
обьясните плз, в чем ошибка?
    #34033368
Piterskiy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
необходимо, чтобы программа возвращала указатель на символ после некоторых действий над строкой. Программа должна быть сделана в 2х вариантах - с указателями и индексами. Сам алгоритм, который необходимо реализовать я сделал, но почему-то функция возвращает не только необходимый символ, но и еще какие-то кракозябры за ним.... обьясните плз, в чем ошибка?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
#include "stdafx.h"

 char strpbrk(char str1[])
{
	return str1[ 3 ];
}
int _tmain(int argc, _TCHAR* argv[])
{
	char s[ 1 ] ;
	char s1[] = "qwerty";
		
	// необходимо перенести данные из s1 в s
    
	s[ 0 ] = strpbrk(s1);
	 
	printf(&s[ 0 ]);
	return  0 ;
}
в результате в консоли пишется r##$#$
а надо просто r как этого достичь?
...
Рейтинг: 0 / 0
обьясните плз, в чем ошибка?
    #34033398
buls
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
#include "stdafx.h"

 char strpbrk(char str1[])
{
	return str1[ 3 ];
}
int _tmain(int argc, _TCHAR* argv[])
{
	char s[ 2 ] ;
	char s1[] = "qwerty";
		
	// необходимо перенести данные из s1 в s
    
	s[ 0 ] = strpbrk(s1);
	s[ 1 ] = NULL; //строка должна заканчиваться нулевым символом
	 
	printf(s);
	return  0 ;
}


...
Рейтинг: 0 / 0
обьясните плз, в чем ошибка?
    #34033413
Piterskiyнеобходимо, чтобы программа возвращала указатель на символ после некоторых действий над строкой. Программа должна быть сделана в 2х вариантах - с указателями и индексами. Сам алгоритм, который необходимо реализовать я сделал, но почему-то функция возвращает не только необходимый символ, но и еще какие-то кракозябры за ним.... обьясните плз, в чем ошибка?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
#include "stdafx.h"

 char strpbrk(char str1[])
{
	return str1[ 3 ];
}
int _tmain(int argc, _TCHAR* argv[])
{
	char s[ 1 ] ;
	char s1[] = "qwerty";
		
	// необходимо перенести данные из s1 в s
    
	s[ 0 ] = strpbrk(s1);
	 
	printf(&s[ 0 ]);
	return  0 ;
}
в результате в консоли пишется r##$#$
а надо просто r как этого достичь?
Медитация над следующими вопросами Вам поможет:
1. Срочно смотреть хелп по функции printf() , а также любую учебную литературу по работе с массивами и указателями (взятие адреса, разыменование и т.д.) в С/С++. Без хорошего разъяснения этого вопроса будут у Вас подобные ошибки....
Правильный вариант:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
#include "stdafx.h"

 char strpbrk(char str1[])
{
	return str1[ 3 ];
}
int _tmain(int argc, _TCHAR* argv[])
{
	char s[ 1 ] ;
	char s1[] = "qwerty";
		
	// необходимо перенести данные из s1 в s
    
	s[ 0 ] = strpbrk(s1);
	 
	printf("%c",s[ 0 ]); // обратите внимание на эту строку и 
                           // подробно прочитайте статью в хелпе
	return  0 ;
}
...
Рейтинг: 0 / 0
обьясните плз, в чем ошибка?
    #34033535
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Piterskiyнеобходимо, чтобы программа возвращала указатель на символ после некоторых действий над строкой. Программа должна быть сделана в 2х вариантах - с указателями и индексами. Сам алгоритм, который необходимо реализовать я сделал, но почему-то функция возвращает не только необходимый символ, но и еще какие-то кракозябры за ним.... обьясните плз, в чем ошибка?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
#include "stdafx.h"

 char strpbrk(char str1[])
{
	return str1[ 3 ];
}
int _tmain(int argc, _TCHAR* argv[])
{
	char s[ 1 ] ;
	char s1[] = "qwerty";
		
	// необходимо перенести данные из s1 в s
    
	s[ 0 ] = strpbrk(s1);
	 
	printf(&s[ 0 ]);
	return  0 ;
}
в результате в консоли пишется r##$#$
а надо просто r как этого достичь?

Если по порядку: в данном случае функция возвращает символ(!), а не указатель на него. Этот возвращаемый символ, становится твоей локальной переменной, и будет уже есстественно находится в другом месте, а не там, где у тебя расположена строка s1. Используя принтэф, ты передаешь указатель на строку, которая должна заканчиваться нулем, но что находится в памяти после твоего вернувшегося символа? Видимо только стеку это извесно. В этом и заключается ошибка. Что бы вывести этот символ используй printf("%c", s[0]); fflush(stdout) или printf("%c\n",s[0]). Ни в коем случае не поступай, так как тебе посоветовал buls, так как ты пишешь в память, которая используется не тобой (если не понял почему, прочитай еще раз).
Далее, по задаче:
1. Вернуть указатель на символ: Для того, что указатель перенести на n позиций используется операция s+n, где s - начальный указатель, а n - количество позиций на которые тебе надо перенести.
3. Вернуть индекс. Ну это и ежу понятно.
...
Рейтинг: 0 / 0
обьясните плз, в чем ошибка?
    #34033757
Piterskiy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо камрады!
хех, я вместо printf("%c\n",s[0]) вводил printf("%s\n",s[0]) и потому зашел в тупик. мда... Надо быть внимательнее однако.
ps. ушел учить матчасть.
...
Рейтинг: 0 / 0
обьясните плз, в чем ошибка?
    #34033772
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PiterskiyСпасибо камрады!
хех, я вместо printf("%c\n",s[0]) вводил printf("%s\n",s[0]) и потому зашел в тупик. мда... Надо быть внимательнее однако.
ps. ушел учить матчасть.

Уважай указатели.
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / обьясните плз, в чем ошибка?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]