- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
void addSlash( const char* command, char* sdo )
{
int command_length;
char *command_line = command;
command_length = strlen(command);
while(command_length>0){
switch(*command_line){
case '"':
strcpy(sdo+strlen(sdo),"\\");
default:
strcpy(sdo+strlen(sdo), command_line);
}
command_line++;
command_length--;
}
}
TheCalligrapher 11.10.2010 23:01 # 0
О сущестовании `strcat` аффтар, очевидно, не знал, посему усердно эмулировал `strcat` через `strcpy + strlen`, хотя и то и другое - неверно, т.к. ясно, что добавлять в хвост надо было только один символ, а не всю оставшуюся входную строку.
В приниципе это даже и не компилируемо в строгом Си компиляторе. Си он хоть и Си, но нарушать const correctness тем не менее не позволяет. Поэтому `char *command_line = command` - это уже ошибка. Видимо использовавшийся компилер ограничился варнингом, который был аффтором проигнорирован.
absolut 12.10.2010 08:00 # 0
Подавляющее большинство кода на этом сайте из такого разряда. Так что не удивляйтесь.
>мулировал `strcat` через `strcpy + strlen`
Именно в этом и есть основная соль данного примера.
На счет const. В классическом C его не было вовсе. А там где начинал появляться не всегда выполнял требования предъявляемые к современному понятию о const. Таким образом, могу вам с уверенностью сказать, что предупреждений компилятора в данном случае не было.
TheCalligrapher 12.10.2010 17:47 # 0
absolut 12.10.2010 21:29 # 0
ursus 18.10.2010 16:56 # 0
absolut 18.10.2010 20:25 # 0
ursus 18.10.2010 23:16 # 0
absolut 19.10.2010 08:29 # 0