2013-11-16 3 views
-1

Допустим, у меня есть:Как преобразовать массив полукокса в нормальный полукокса в C

char myName[] = "Jason Marks "; 

И я хотел бы передать, что в обычный символ. Ниже не будет работать:

char fullName = myName[]; 

Как я могу сделать так, что весь «Джейсон Marks» получает переданы в новую переменную? А также, можно ли удалять символы из этой новой переменной?

Например, удалить первый символ и остаются с:

"ason Marks " 
+2

Символ может содержать только один символ. То, что вы пытаетесь сделать, не имеет смысла. – Mat

+0

подумайте, что вы смущены тем, что такое _char_. Тип _char_ способен хранить только одиночные символы, поэтому myname является char []. также _array of char_ является нормальной строкой в ​​c .. – amdixon

+0

@amdixon О, ладно, я понял. Как я могу напечатать все «Джейсон Маркс» с помощью printf? Когда я пытаюсь распечатать его, я получаю только один символ, используя указатель [location] –

ответ

1

Это невозможно хранить переменную строку в char. Так как char способен хранить один байт, а то, что вы пытаетесь сохранить, - это строка из n байт.

Вместо этого вы можете использовать указатель, чтобы сделать это:

char array[] = "My Name"; 
char *ptr = array; 

Теперь, если вы хотите "y Name" только, только увеличиваем ptr 1, т.е. ptr++; и теперь, если вы печатаете ptr с помощью printf вы получите "y Name".

ПРИМЕЧАНИЕ: Вы также можете использовать char *ptr = "My Name";, но проблема в том, что это будет хранить строку "My Name" в только для чтения местоположения, т.е. ptr будет указывать на неизменяемое место.
Итак, в заключение, вы не можете сделать что-то подобное: ptr[0] = 'B'; однако вы можете сделать ptr++;

EDIT: В ответ на комментарий по Jason Marks:

Вы можете сделать что путем замены последнего символа на символ \0, то есть
ptr[strlen(ptr) - 1] = '\0';

+0

Совершенный, именно то, что я искал. Кроме того, есть способ стереть письмо в конце? Например, получите '' My Nam '' –

1

char хранит единственный характер, что вам нужно, это массив.

Используйте другой массив символов и используйте strncpy для копирования n символов из источника в пункт назначения.

strncpy(destination, source, length); 

Так что в вашем случае, если вы хотите сделать:

char fullName[MAX_SIZE]; // Ensure MAX_SIZE >= strlen(myName) + 1, 
          // or dynamically allocate using malloc 
          // with the above size and remember to 
          // free it later. 
strncpy(fullName, myName, strlen(myName)); 

Теперь, вместо того, чтобы удалить первый символ в новом массиве, то почему бы не скопировать только то, что вам нужно?

strncpy(fullName, myName + 1, strlen(myName)-1); 
         ^^^ Start from 2nd position, index: 1 
Смежные вопросы