2015-12-10 2 views
-1

Если у меня есть в C с char buffer[256], заполняемыми, и я хочу, чтобы скопировать все символы из buffer[5] в buffer[25] в char derp[20] и имею Derp быть нулевым байтом, как я должен это делать?
Редактировать (1): math char derp[21]
Редактировать (2): math! char derp[22]
Чтобы прояснить некоторые вещи, вот некоторые из моего кода и проблем, с которыми я столкнулся с ним:строки копирование части струнного программирования C

char buffer[256]; 
char derp[20]; 
... 
strncpy(derp, &buffer[5], 20); //copy into derp 
printf("buffer: %s\n", buffer); //print what I had 
printf("derp: %s\n", derp); //print what I got 

buffer проведет некоторую строку, как «Открыть счет».
То, что я пытаюсь сделать, это скопировать «учетную запись» с buffer в derp без копирования «ОТКРЫТО».
Выход вернется:

buffer: OPEN 
derp:  

Если я изменяю buffer держать «OPENaccount» без пространства, выход будет возвращать:

buffer: OPEN 
derp: account 

Я понимаю, что strncpy может смотреть на непечатаемых по-разному, но то почему мой первый набор результатов ничего не возвращает? Я также попытался изменить &buffer[5] на &buffer[6], но получил тот же результат.

+1

'derp' нуждается в 22 элементах. – BLUEPIXY

+0

@BLUEPIXY, ладно, спасибо. Предполагая, что я инициализирую его вместо 'char derp [21]', как сделать копию из 'buffer' в' derp'? – ChessMuster

+2

Добро пожаловать в переполнение стека. Вскоре прочитайте страницу [О программе]. Я предлагаю вам исправить размер выборки в вашем вопросе, чтобы на него можно было ответить; элементы с 5 по 25 буфера занимают 21 байт, а затем вам нужен нулевой ограничитель. Когда вы это исправите, вы можете объяснить нам, какая у вас проблема? Есть множество способов сделать это - какие (-ы) вы пробовали? В чем была проблема, с которой вы столкнулись? Мы поможем вам разобраться в ваших попытках; мы обычно не идем и не пишем код для вас. –

ответ

0

Использование strncpy.

char *p = &buffer[5]; 
char derp[22]; 
strncpy(derp, p, 21); // Copy 21 characters from buffer[5] to buffer[25] 
derp[21] = '\0'; 
0

// буфер [5] в буфер [25] в полукокса Derp [20]

Ну, помня о том, что количество символов для копирования на самом деле 21 символов и до сих пор нуждаются в комнате для терминатора NUL характер ...

char buffer[30]; // 30 is arbitrary, must be greater than 26 
char derp[22]; 

int j = 0; 
for(int i = 5; i < 25; i++, j++) 
{ 
    derp[j] = buffer[i]; 
} 
derp[i] = '\0'; 

или лучше:

char buffer[30]; // 30 is arbitrary, must be greater than 26 
char derp[22] = {'\0'}; 

int j = 0; 
for(int i = 5; i < 25; i++, j++) 
{ 
    derp[j] = buffer[i]; 
} 
+0

при downvoting, как насчет комментария о том, почему downvote. – user3629249

+0

этот ответ правильно отвечает на вопрос OP о том, как скопировать сегмент буфера. Если буфер не содержит допустимую строку символов или содержит более одной допустимой строки символов, не является материалом для копирования подмножества символов в массиве buffer [] – user3629249

0

Я понимаю, что strncpy может смотреть на непечатаемых по-разному ...

strncpy ни в коем случае смотреть на непечатаемых по-разному. По всей вероятности BLUEPIXY прав, который писал:

buffer: OPEN: вероятно buffer[5] является '\0'.

Смежные вопросы