Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.11.2011, 12:36   #11
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,831
По умолчанию

Цитата:
The strcpy function copies strSource, including the terminating null character, to the location specified by strDestination.
Цитата:
"12345678"
Строка = 8 символов + 0

Начните читать что-нибудь.
p51x вне форума Ответить с цитированием
Старый 27.11.2011, 13:03   #12
goluzov
Форумчанин
 
Регистрация: 26.06.2010
Сообщений: 168
По умолчанию

strcpy( string, "123" );
strcpy( string2, "1234567" );

вот так выведит 1234567 123

strcpy( string, "123" );
strcpy( string2, "123456789" );

а вот так 123456789 9
goluzov вне форума Ответить с цитированием
Старый 27.11.2011, 13:26   #13
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
а вот так 123456789 9
И что тебя смущает?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 27.11.2011, 14:38   #14
Kostia
Участник клуба
 
Аватар для Kostia
 
Регистрация: 21.11.2007
Сообщений: 1,692
По умолчанию

Код:
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
int main( void )
{
  char string[8] = {0};//инциализируем нулями
  char string2[9] = {0};
//for(auto x : string) printf("%d",(int)x);
   strcpy( string, "123" );
   strcpy( string2, "12345678\0" ); //\0 не обязательно, т.к. мы уже всю строку инициализировали нулями
//Ps: этот символ является концом строки
//Константные сроки содержат на 1 символ больше \0 - конец строки

   printf("%s, %s, %d \n", string,string2,sizeof("12345678"));

   system("pause");
}
Kostia вне форума Ответить с цитированием
Старый 27.11.2011, 14:56   #15
goluzov
Форумчанин
 
Регистрация: 26.06.2010
Сообщений: 168
По умолчанию

а ведь есть функции и им не надо нулл байт.... как они понимают что переменая заканчивается.... за исключением когда в в команде есть dword
goluzov вне форума Ответить с цитированием
Старый 27.11.2011, 15:02   #16
Сыроежка
Форумчанин
 
Регистрация: 01.07.2011
Сообщений: 423
По умолчанию

Цитата:
Сообщение от goluzov Посмотреть сообщение
strcpy( string2, "12345678" );
Значит так, молодой человек, открываете книжку или находите в интернет и внимательно, я повторяю, внимательно читаете описание функции strcpy

Прежде, чем используете какую-нибудь функцию, надо знать, как она работает! Но перед тем, как читать описание функции strcpy, вам также будет очень полезно, как я понимаю, первый раз в жизни выполнить следующее предложение

Код:
printf( "%u\n|, sizeof( "12345678" ) );
Со мной можно встретиться на www.clipper.borda.ru
Сыроежка вне форума Ответить с цитированием
Старый 27.11.2011, 15:31   #17
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
и им не надо нулл байт
Например? Строки в Си всегда заканчиваются нулем - так принято (и не только в Си).
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 27.11.2011, 15:47   #18
goluzov
Форумчанин
 
Регистрация: 26.06.2010
Сообщений: 168
По умолчанию

в php есть функции которым передать нулл байт и они не посчитают это что заканчивается переменая
goluzov вне форума Ответить с цитированием
Старый 27.11.2011, 17:09   #19
Kostia
Участник клуба
 
Аватар для Kostia
 
Регистрация: 21.11.2007
Сообщений: 1,692
По умолчанию

Код:
char cs[] = "asASD\0asdasdf\0asdf";
for(auto x : cs) cout << x;
У меня и в C++ ничего не заканчивается в нуле
на экране мы увидим: asASD asdasdf asdf
А так заканчивается:
Код:
char cs[] = "asASD\0asdasdf\0asdf";
for(int i=0; cs[i]!='\0'; i++) cout << cs[i];
на экране мы увидим: asASD
А так, опять ничего не заканчивается:
Код:
char cs[] = "asASD\0asdasdf\0asdf";
for(int i=0; i<sizeof("asASD\0asdasdf\0asdf"); i++) cout << cs[i];
на экране мы увидим: asASD asdasdf asdf
И напоследок
Код:
char cs[] = "asASD asdasdf asdf";
for(int i=0; cs[i]!='\0'; i++) cout << cs[i];
на экране мы опять увидим: asASD asdasdf asdf

Последний раз редактировалось Kostia; 27.11.2011 в 17:15.
Kostia вне форума Ответить с цитированием
Старый 27.11.2011, 18:07   #20
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
в php есть функции
Так о каком языке идет речь?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как подменить адрес возврата функции func на адрес функции f используя переполнение буфера buf и функции gets dmitrii6120 Помощь студентам 6 14.11.2011 20:10
переполнение буфера Dimarik Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 13.07.2011 02:24
Арифметическое переполнение hasana Помощь студентам 2 04.11.2010 18:08
Переполнение деления!!! zero-cool Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 5 28.09.2010 21:10
Переполнение Стека Викдон Паскаль, Turbo Pascal, PascalABC.NET 0 19.12.2008 19:16