Форум программистов, компьютерный форум CyberForum.ru

strcmp - C++

Восстановить пароль Регистрация
 
Miwa123
37 / 37 / 1
Регистрация: 16.04.2013
Сообщений: 317
Записей в блоге: 1
24.05.2013, 21:29     strcmp #1
C++
1
2
3
4
5
6
7
slovo[3]={'d','d','d'};
char *slovo2=new char[k];
for(int i=0;i<k;i++)
{
cin>>slovo2[i];
}
int s=strcmp(slovo2,slovo);
и ввожу d,d,d;
почему в переменной s не 0??? в документации написано что она 0 должна возвр. при равных массивах. помогите!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.05.2013, 21:29     strcmp
Посмотрите здесь:

strcmp C++
C++ strcmp()
C++ Функция strcmp
C++ STRCMP
C++ Функция strcmp
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11845 / 6824 / 771
Регистрация: 27.09.2012
Сообщений: 16,919
Записей в блоге: 2
Завершенные тесты: 1
24.05.2013, 21:32     strcmp #2
Цитата Сообщение от Miwa123 Посмотреть сообщение
slovo[3]={'d','d','d'};
Потому что нет нуль терминатора и читает память дальше
quwy
Native x86
 Аватар для quwy
2735 / 1824 / 477
Регистрация: 13.02.2013
Сообщений: 6,113
24.05.2013, 21:35     strcmp #3
Потому что strcmp сравнивает строки, а не массивы. Строка от массива отличается наличием в конце терминирующего символа \0, которого у вас нет. Поэтому после {d, d, d} она сравнивает весь тот мусор, который лежит в памяти за каждым из массивов, пока не наткнется на этот символ.
Miwa123
37 / 37 / 1
Регистрация: 16.04.2013
Сообщений: 317
Записей в блоге: 1
24.05.2013, 21:35  [ТС]     strcmp #4
Цитата Сообщение от Croessmah Посмотреть сообщение
Потому что нет нуль терминатора и читает память дальше
как его вставить. подскажи пожалуйста!
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11845 / 6824 / 771
Регистрация: 27.09.2012
Сообщений: 16,919
Записей в блоге: 2
Завершенные тесты: 1
24.05.2013, 21:35     strcmp #5
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
#include <cstring>
using namespace std;
int main(){
    const int k=4;
    char slovo[k]="ddd";
    char *slovo2=new char[k];
    for(int i=0;i<k-1;i++){
        cin>>slovo2[i];
    }
    slovo2[k-1]='\0';
    int s=strcmp(slovo2,slovo);
    std::cout<<s<<std::endl;
}
quwy
Native x86
 Аватар для quwy
2735 / 1824 / 477
Регистрация: 13.02.2013
Сообщений: 6,113
24.05.2013, 21:37     strcmp #6
Croessmah,
C++
1
char slovo[k]="ddd\0";
?
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11845 / 6824 / 771
Регистрация: 27.09.2012
Сообщений: 16,919
Записей в блоге: 2
Завершенные тесты: 1
24.05.2013, 21:38     strcmp #7
quwy, "ddd" - 4 символа(нуль терминатор сам приписывается к строковым литералам)
quwy
Native x86
 Аватар для quwy
2735 / 1824 / 477
Регистрация: 13.02.2013
Сообщений: 6,113
24.05.2013, 21:40     strcmp #8
Croessmah, че-то я протупил, что массив у вас (как у ТС), а не строковой литерал. Пора отдыхать.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.05.2013, 21:52     strcmp
Еще ссылки по теме:

C++ strcmp
C++ Не работает strcmp
Strcmp C++

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

Или воспользуйтесь поиском по форуму:
Miwa123
37 / 37 / 1
Регистрация: 16.04.2013
Сообщений: 317
Записей в блоге: 1
24.05.2013, 21:52  [ТС]     strcmp #9
мужики спасибо. решил проблему
Yandex
Объявления
24.05.2013, 21:52     strcmp
Ответ Создать тему
Опции темы

Текущее время: 22:04. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru