Как объявить строку массива в C ++ - PullRequest
0 голосов
/ 13 октября 2010

Это очень просто, но так:

Я хочу строку из 4 символов: "abcd"

как мне объявить новую строку, например?

char *newStr = new char[4]; // or -> char newStr[4];

strcpy(newStr, "abcd");

нулевой символ '\ 0' должен соответствовать размеру строки, поэтому новый символ [5]?

Ответы [ 7 ]

4 голосов
/ 13 октября 2010

Да, символ завершения nul является частью строки. Таким образом, вам нужно выделить место для 5 символов:

char *newStr = new char[5];
strcpy(newStr, "abcd");

Не забудьте освободить динамически выделяемую память, как только вы закончите, используя ее как:

delete[] newStr;

В качестве альтернативы вы также можете сделать:

char newStr[] = "abcd";

В C ++ для представления строк лучше использовать string class:

string newStr = "abcd";
4 голосов
/ 13 октября 2010

да, символ \ 0 является частью строки, и вы также должны выделить для него память

3 голосов
/ 13 октября 2010

У вас нет "нового" в C, но только в C ++.

Вы могли бы:

char* string = "abc";

или

char string[] = "abc";

или

char* string = (char*) malloc(sizeof(char) * 4);
strcpy(string, "abc");
string[3]='\0';
/* remember to free the used memory */

или

char string[] = { 'a', 'b', 'c', '\0' };
1 голос
/ 13 октября 2010

Если это C ++ (кажется, что я прочитал заново), что не так с

std::string my_string = "abcd"; 

Разве это не то, что вы ищете? Я мог что-то упустить.

1 голос
/ 13 октября 2010

Это должно сделать грязную работу за вас:

char newString[] = "abcd";

Также, да, вам нужен новый символ [5];

0 голосов
/ 13 октября 2010

/ ------------------- строковые конструкторы ----------------

string emp("");              // constructs the "empty string"
string emp2;                 // constructs another "empty string"
string spc(" ");             // constructs string containing " "
string sstr("Some string");  // string containing "Some string"
char frob[] = "Frobnitz";
string sfrob(frob);          // constructs a C++ string containing
                             //   "Frobnitz" from a C-style string
string bar = "foobar";       // string containing "foobar"

// ------------------- stdout, c_str() --------------------

Источник: http://www -cs-students.stanford.edu / ~ sjac / c-to-cpp-info / string-class

0 голосов
/ 13 октября 2010

Если это строковый литерал, вы можете сделать одно из следующих:

char *string = "abcd";
char astring[] = "abcd";

Если вы хотите знать это для последующего копирования строк, вы можете иметь буфер или выделить память, и место для '\ 0' необходимо, даже если strlen("abcd") вернет 4, потому что не учитывает терминатор .

/* buffer way */
char string[5];
strcpy(string, "abcd");

/* allocating memory */
// char *ptr = malloc(5*sizeof(*ptr)); // question was retagged C++
char *ptr = static_cast<char*>(malloc(5*sizeof(*ptr));
strcpy(ptr,"abcd");
/* more stuff */
free(ptr);

Поскольку вопрос был переназначен на C ++, вы также можете использовать new и delete.

/* using C++ new and delete */
char *ptr = new char[5]; // allocate a block of 5 * sizeof(char)
strcpy(ptr, "abcd");
// do stuff
delete [] ptr; // delete [] is necessary because new[] was used

Или вы также можете использовать std::string.

...