FAQ:ANSI CPP:присвоение строки — различия между версиями

Материал из Весельчак У
Перейти к: навигация, поиск
(Ветвление FAQ:ANSI CPP)
 
м (Почему не получается присвоить строку?)
Строка 2: Строка 2:
  
 
Например я пишу:
 
Например я пишу:
<pre>
+
<syntaxhighlight lang="cpp">
 +
char mess[] = "";
  
char mess[] = "";
+
mess = "мой текст"; // задаю значение строки
 
+
MessageBox(hwnd, mess, "Error Message", MB_OK);
mess = "мой текст"; // задаю значение строки
+
</syntaxhighlight>
MessageBox(hwnd, mess, "Error Message", MB_OK);
+
</pre>
+
  
 
'''Ответ:'''
 
'''Ответ:'''
 
Массив mess объявлен как
 
Массив mess объявлен как
 +
<syntaxhighlight lang="cpp">
 
   char mess[] = "";
 
   char mess[] = "";
 +
</syntaxhighlight>
  
 
то есть всё равно что
 
то есть всё равно что
 +
<syntaxhighlight lang="cpp">
 
   char mess[1] = '\0';
 
   char mess[1] = '\0';
 +
</syntaxhighlight>
  
 
Размер массива равен единице, первый элемент равен 0.
 
Размер массива равен единице, первый элемент равен 0.
  
 
Чтобы присвоить строку, нужно увеличить размер массива (см. пример) и использовать strcpy для копирования содержимого "мой текст" в mess:
 
Чтобы присвоить строку, нужно увеличить размер массива (см. пример) и использовать strcpy для копирования содержимого "мой текст" в mess:
<pre>
+
<syntaxhighlight lang="cpp">
 
+
char mess[100];
char mess[100];
+
mess[0]=0;//инициализация
mess[0]=0;//инициализация
+
  
strcpy(mess, "мой текст");
+
strcpy(mess, "мой текст");
</pre>
+
</syntaxhighlight>
  
 
Либо использовать std::string (стандартный класс работы со строками в C++).
 
Либо использовать std::string (стандартный класс работы со строками в C++).
  
 
[[Category:FAQ:ANSI CPP]]
 
[[Category:FAQ:ANSI CPP]]

Версия 00:55, 30 июля 2008

Почему не получается присвоить строку?

Например я пишу:

char mess[] = "";
 
mess = "мой текст"; // задаю значение строки
MessageBox(hwnd, mess, "Error Message", MB_OK);

Ответ: Массив mess объявлен как

   char mess[] = "";

то есть всё равно что

   char mess[1] = '\0';

Размер массива равен единице, первый элемент равен 0.

Чтобы присвоить строку, нужно увеличить размер массива (см. пример) и использовать strcpy для копирования содержимого "мой текст" в mess:

char mess[100];
mess[0]=0;//инициализация
 
strcpy(mess, "мой текст");

Либо использовать std::string (стандартный класс работы со строками в C++).