2013-05-27 2 views
0

Делая аналог UNIX Func "ф" на с и у меня есть проблемы с реализацией:Проблемы с strcat [C] для UNIX

struct stat fsd; 
stat(argv[argc - 1], &fsd); 

if ((fsd.st_mode & S_IFMT) == S_IFDIR) { 

    unsigned int i; 

    for (i = src; i < argc - 1; i++) { 

     char *xpath = strcat(argv[argc - 1], "/"); 
       xpath = strcat(argv[argc - 1], argv[i]); 

     if (cpf(argv[i], xpath) == 0) { 

      printf("%s -> %s\n", argv[i], xpath); 
     } 

    } 
} 

Пример команды: ./cp F1 F2 F3 F4 реж
Где: f * - файлы и каталог dir. Итак, файлы нужно скопировать в каталог, но я не могу создать правильный путь для каталога.

Выход:

f1 -> dir/f1 
f2 -> dir/f1/f2 
f3 -> dir/f1/f2/f3 
f4 -> dir/f1/f2/f3/f4 

Но мне нужно:

f1 -> dir/f1 
f2 -> dir/f2 
f3 -> dir/f3 
f4 -> dir/f4 

действительно не имеют ни малейшего представления о том, как это исправить :(

+0

Прочтите man-страницу для 'strcat()', действительно. Ваш буфер слишком мал. –

+0

'argv [argc - 1]' '_not_ yours, чтобы писать в конце. Создайте свой собственный буфер для записи/добавления. – mah

ответ

2

Основная проблема, многих, что два

xpath = strcat(argv[argc - 1], ... 

concatenate в argv [argc - 1] дополнительный текст.

Я уверен, что вы думаете, что strcat() объединяет 2 строки и поставляет результат объединения как ответ, не влияя на входные данные. Он этого не делает, скорее, добавляет второй параметр к первому, возвращая первый параметр.

Перезапишите свой код, чтобы создать рабочее пространство для буфера.

char xpath[1000]; 
strcpy(xpath, argv[argc - 1]); 
strcat(xpath, "/"); 
strcat(xpath, argv[i]); 

BTW, SizeOf() XPath может быть MAXPATHLEN или какой-либо другой постоянной системы, но это другой вопрос. См. #include limits.h.

+0

Thx много для вашей помощи! :) – nemelianov

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