Я хотел бы скопировать source
строку в номер dest
. Если я скомпилирую следующую программу:Memset and characters
#include <stdio.h>
int main(void) {
char dest[6];
char source[6];
strcpy(dest,source);
while (*dest) { printf("%c",*dest++); }
while (*source) {printf("%c",*source++); }
return 0;
}
Я получаю ошибку времени выполнения. Я подозреваю, что это потому, что strcpy
копирует от источника к месту назначения, пока не встретит \0
. Однако он не столкнулся с нулевым символом и продолжал копировать из буфера до возникновения ошибки времени выполнения. Чтобы решить эту проблему, я изменил код следующим образом:
#include <stdio.h>
int main(void) {
char dest[6];
char source[6];
memset(dest, '\0', 6*sizeof(dest)); //trying to set dest to '/0'
strcpy(dest,source);
while (*dest) { printf("%c",*dest++); }
while (*source) {printf("%c",*source++); }
return 0;
}
я получаю следующие ошибки:
prog.c:11:38: error: lvalue required as increment operand
while (*dest) { printf("%c",*dest++); } ^
и
prog.c:11:38: error: lvalue required as increment operand
while (*dest) { printf("%c",*source++); } ^
Почему это происходит?
Эта первая программа [не компилируется] (http://ideone.com/2Zy1hx) по той же причине, что и вторая. Вы уверены, что это источник, который вы использовали? – templatetypedef
Кроме того, вы не можете применять ++ к массивам. :-) – templatetypedef
Скорее, 'dest ++' не является законным кодом C, если 'dest' является массивом. – templatetypedef