Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
SergioO
168 / 184 / 90
Регистрация: 13.12.2015
Сообщений: 995
1

Указатели char*. Принцип работы

08.01.2016, 17:22. Просмотров 295. Ответов 5
Метки нет (Все метки)

Здравствуйте.
пример:
C
1
2
3
4
5
6
7
char *s1="Any1", s2="Any2";
 
void string_copy(char *s1, char *s2)
{
while((*s1++= *s2++)!='\0')
;
}
ведь s1 и s2 указывают на начало соответствующих строк
вопрос:
получается что копирование ориентируется только на '\0', а если по какой-то причине '\0' не встретится(сбой, например), то что? ведь char* - просто адрес, который можно положить в соответствующий по размеру целочисленный тип ?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.01.2016, 17:22
Ответы с готовыми решениями:

Про char указатели, массивы и malloc
Если у меня есть функция, typedef struct CNS { char* title; int width;...

Указатели Char, передача адреса в функцию
в данном случае проблема выглядит следующим образом: main(void) { ...

Принцип работы feof
Здравствуйте.Обьясните пожалуйста как работает feof и связан ли признак конца...

Принцип работы sscanf
Привет, ребята. Нужно разобраться. Я так понимаю это функция, которая ищет в...

Непонятен принцип работы программы
#include <stdio.h> main(){ double character; character = 0;...

5
Jewbacabra
Эксперт PHP
3735 / 3086 / 1356
Регистрация: 24.04.2014
Сообщений: 9,355
08.01.2016, 17:33 2
SergioO,
1) s1 и s2 на 1 строчке и 3 строчке - это 4 разные переменные.
2) на 1 строчке только s1 имеет тип указатель на char, s2 - char
3) "Any1" и "Any2" - константы, следовательно их изменение - UB
4) Если 0 не будет, то продолжит идти дальше по памяти.
0
SergioO
168 / 184 / 90
Регистрация: 13.12.2015
Сообщений: 995
08.01.2016, 17:45  [ТС] 3
код подправлю.
C
1
2
3
4
5
6
7
8
char *s1="Any1";
char  *s2="Any2";
void string_copy(char *s1, char *s2)
{
while((*s1++= *s2++)!='\0')
;
string_copy(s1,s2);
}
Цитата Сообщение от Jewbacabra Посмотреть сообщение
4) Если 0 не будет, то продолжит идти дальше по памяти.
вот о чем вопрос - char* же не знает сколько за ним символов в строке? он ориентируется типа "от того на что я указываю и до '\0'"?
0
Jewbacabra
Эксперт PHP
3735 / 3086 / 1356
Регистрация: 24.04.2014
Сообщений: 9,355
08.01.2016, 18:01 4
Цитата Сообщение от SergioO Посмотреть сообщение
код подправлю.
Все еще изменяется константа. И скобка закрывающая не там
C
1
2
3
4
5
6
7
8
void string_copy(char *s1, char *s2) {
    while (*s1++ = *s2++);
}
int main() {
    char s1[50] = "Any1";
    char s2[] = "Any2";
    string_copy(s1, s2);
}
Цитата Сообщение от SergioO Посмотреть сообщение
он ориентируется типа "от того на что я указываю и до '\0'"?
Он ни на что не ориентируется, C вообще ничего сам делать не будет, только то что написано в коде. А написано вот что:
Цитата Сообщение от SergioO Посмотреть сообщение
while((*s1++= *s2++)!='\0')
т.е. выполнять, пока не дойдет до нуля
0
LFC
730 / 535 / 416
Регистрация: 17.09.2015
Сообщений: 1,598
08.01.2016, 20:27 5
Jewbacabra,
Цитата Сообщение от Jewbacabra Посмотреть сообщение
3) "Any1" и "Any2" - константы, следовательно их изменение - UB
стесняюсь спросить- а что такое UB?
0
Jewbacabra
Эксперт PHP
3735 / 3086 / 1356
Регистрация: 24.04.2014
Сообщений: 9,355
08.01.2016, 20:29 6
Цитата Сообщение от LFC Посмотреть сообщение
а что такое UB?
undefined behavior
1
08.01.2016, 20:29
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.01.2016, 20:29

Объясните принцип работы этого куска программы
Объясните принцип работы этого куска программы for ( p = strtok(a, SCHARS);...

Какой принцип работы у USB_Mouse
Пишу дипломную работу, приложение на андройд подключенного к ПК по USB, которое...

Объявить массив из N указателей на функции, возвращающих указатели на функции, возвращающие указатель на char
Задание: Объявить массив из N указателей на функции, возвращающих указатели...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru