crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

voipp
  опции профиля:
сообщение 26.3.2011, 0:53
Сообщение #1


Участник
**

Группа: Участник
Сообщений: 116
Регистрация: 20.10.2009
Из: Msk
Пользователь №: 1166

Спасибо сказали: 0 раз(а)




Репутация:   0  


#include<iostream>
#include<string.h>

using namespace std;

int main(){
    char str1[8]="privet!";
    char str2[8],str3[10],str4[1];
    strcpy(str4,str1);
    printf("%s \n %d  %d",str4,strlen(str4),sizeof(str4));
    (!strcmp(str4,str1))&&(printf("!!!"));
    system("pause");
}


после выполнения этого кода, вот что вылезает на экран: privet!
7 1 нажмите на кнопку....
откуда такие чудеса?если заменить strcpy на strcpy_s, то в случае разных по длине строк, в результирующую строку запишется 0?

и еще вопрос не по теме: если написать строчку a && b && c && .... то как будет вычисляться это выражение если a,b,c,... имеют тип bool

Сообщение отредактировал voipp - 26.3.2011, 1:12
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
Алексей1153
  опции профиля:
сообщение 26.3.2011, 11:39
Сообщение #2


фрилансер
******

Группа: Участник
Сообщений: 2943
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


Цитата
(!strcmp(str4,str1))&&(printf("!!!"));

это строчка эквивалентна следующему:

strcmp(str4,str1);
printf("!!!");

выводится
Цитата
privet!
7 1!!!Для продолжения нажмите любую клавишу . . .


а вот если написать
if (a && b && c)
{
}

где выражение a==false , то выражения b и c даже не будут считаться (если это функции - то не будут вызваны)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
voipp
  опции профиля:
сообщение 31.3.2011, 0:17
Сообщение #3


Участник
**

Группа: Участник
Сообщений: 116
Регистрация: 20.10.2009
Из: Msk
Пользователь №: 1166

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(Алексей1153 @ 26.3.2011, 11:39) *
Цитата
(!strcmp(str4,str1))&&(printf("!!!"));

это строчка эквивалентна следующему:

strcmp(str4,str1);
printf("!!!");


Неа, не эквивалентные! сначала выполняется (!strcmp(str4,str1)) если оно ложно, то второе выполнятся не будет.Так устроен компилятор

Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


RSS Рейтинг@Mail.ru Текстовая версия Сейчас: 18.3.2025, 3:36