Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
260 / 208 / 99
Регистрация: 13.12.2015
Сообщений: 1,098
1

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

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

Author24 — интернет-сервис помощи студентам
Здравствуйте.
пример:
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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.01.2016, 17:22
Ответы с готовыми решениями:

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

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

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

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

5
Эксперт PHP
4925 / 3920 / 1620
Регистрация: 24.04.2014
Сообщений: 11,441
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
260 / 208 / 99
Регистрация: 13.12.2015
Сообщений: 1,098
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
Эксперт PHP
4925 / 3920 / 1620
Регистрация: 24.04.2014
Сообщений: 11,441
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
737 / 542 / 416
Регистрация: 17.09.2015
Сообщений: 1,601
08.01.2016, 20:27 5
Jewbacabra,
Цитата Сообщение от Jewbacabra Посмотреть сообщение
3) "Any1" и "Any2" - константы, следовательно их изменение - UB
стесняюсь спросить- а что такое UB?
0
Эксперт PHP
4925 / 3920 / 1620
Регистрация: 24.04.2014
Сообщений: 11,441
08.01.2016, 20:29 6
Цитата Сообщение от LFC Посмотреть сообщение
а что такое UB?
undefined behavior
1
08.01.2016, 20:29
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.01.2016, 20:29
Помогаю со студенческими работами здесь

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

Принцип работы программы для диагностики машин
На курсовуя работу випала тема: диагностика автомобиля. не знаю с чего начать писать код....

Не могу понять принцип работы сортировки пузырьком
#include <stdio.h> main() { int d ={2,3,4,1,5,6,8,7,9}; int j = 1, k = 0;...

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


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru