Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
4 / 4 / 0
Регистрация: 30.05.2013
Сообщений: 61

Сравнение двух строк в переменных

05.11.2013, 16:54. Показов 1114. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, меня интересует 1 вопрос - почему происходит так, как происходит?)

Если мы объявим:
C
1
#define max 10
...
C
1
2
3
const char* s1 = "s1";
const char* s2 = "s2";
char s5[max] = "";
то сравнение strcmp(s5, s1) пройдет нормально
а если мы объявим:
C
1
2
const char* s1 = "s1", s2 = "s2";
char s5[max] = "";
то программа завершается при сравнении strcmp(s5, s2).

Добавлено через 20 минут
Кроме того, если объявить так
C
1
2
const char s1 = "s1", s2 = "s2";
char s5[max] = "";
и сравнивать strcmp(s5, s1) или strcmp(s5, s2), то программа то же закрывается. Да, я знаю, что строки заканчиваются '/0', но там же 2 строки и они обе должны так заканчиваться?) или я ошибаюсь?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
05.11.2013, 16:54
Ответы с готовыми решениями:

Сравнение двух строк
Всем доброго времени суток! Нужна помощь. Я только начинаю изучать язык Си. Даны две строки S1 и S2 (причем длина S2 не превосходит длину...

Сравнение префиксов двух строк
Сравнить префиксы 2х строк Вход: qwehhhhhujbj qwеioiojioj Выход: "yes" Вход: bbaaffffff abbgugugu Выход:...

Выделение и сравнение слов из двух строк
По какой причине не работает функция proces? Подскажите, пожалуйста #include <stdio.h> #include <string.h> #include...

6
 Аватар для Ryuk
183 / 182 / 56
Регистрация: 10.06.2011
Сообщений: 871
05.11.2013, 16:58
Lerby, если не ошибаюсь, то запись:
Цитата Сообщение от Lerby Посмотреть сообщение
const char s1 = "s1", s2 = "s2";
будет эквивалентна как объявлению s1 константы и s2 char.
1
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,973
05.11.2013, 17:26
Цитата Сообщение от Lerby Посмотреть сообщение
const char* s1 = "s1", s2 = "s2";
C
1
const char* s1 = "s1", * s2 = "s2";
1
4 / 4 / 0
Регистрация: 30.05.2013
Сообщений: 61
05.11.2013, 18:44  [ТС]
Цитата Сообщение от Lerby Посмотреть сообщение
Здравствуйте, меня интересует 1 вопрос - почему происходит так, как происходит?)
Кроме того, если объявить так
C
1
2
const char s1 = "s1", s2 = "s2";
char s5[max] = "";
и сравнивать strcmp(s5, s1) или strcmp(s5, s2), то программа то же закрывается. Да, я знаю, что строки заканчиваются '/0', но там же 2 строки и они обе должны так заканчиваться?) или я ошибаюсь?
Кто может подсказать, почему так нельзя сравнивать?
0
 Аватар для Ryuk
183 / 182 / 56
Регистрация: 10.06.2011
Сообщений: 871
05.11.2013, 19:40
Lerby, а вы разве что-то сравниваете? У вас второе объявление в строке является просто переменной, не указателем. Видимо так было задумано разработчиками.
0
4 / 4 / 0
Регистрация: 30.05.2013
Сообщений: 61
05.11.2013, 20:30  [ТС]
Цитата Сообщение от Ryuk Посмотреть сообщение
Lerby, а вы разве что-то сравниваете? У вас второе объявление в строке является просто переменной, не указателем. Видимо так было задумано разработчиками.
Я не понимаю, почему программа вылетает при двух переменных?
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,973
05.11.2013, 23:41
Цитата Сообщение от Lerby Посмотреть сообщение
Я не понимаю, почему программа вылетает при двух переменных?
А предупреждения при компиляции компилятор сам себе пишет?
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
~/cpp/other $ cat > wrong_pointer.c
#include <stdio.h>
 
int main(void) {
    char * ptr = "some string";
    char chr = "some string";
    printf("%p\n%#hhx\n", ptr, chr);
    return 0;
}
~/cpp/other $ gcc -o wrong_pointer wrong_pointer.c 
wrong_pointer.c: In function 'main':
wrong_pointer.c:5: warning: initialization makes integer from pointer without a cast
~/cpp/other $ ./wrong_pointer 
0x1fe8
0xe8
~/cpp/other $
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
05.11.2013, 23:41
Помогаю со студенческими работами здесь

Получение первых строк двух файлов в переменные и сравнение значений этих переменных
Приветствую... Народ прошу помогите написать бат программу...я бы и сам написал, но знаю только pascal а мне нужно чтоб пошло не только...

Сравнение двух текстовых переменных и вывод их разницы в виде текста что отличается в двух массивах
Есть две текстовых переменных типа string. Необходимо вывести в третью переменную, разницу этих двух переменных т.е. первая переменная =...

Сравнение двух переменных
Итак, у нас есть рандомные значения a,b которые поступают к нам ежесекундно. Задача: Если a &gt; 150, то b = 0, далее b += (int) b я так...

Сравнение двух переменных
Ситуация такая есть метод который выдает значение: &quot;Александр Шлеменко&quot;. И есть строка которая выглядит также т.е. &quot;Александр...

Сравнение переменных строк
Здравствуйте, уважаемые форумчане. Как один из что-то понимающих по c++ в группе, на меня наваливается ответственность все это выполнять....


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru