Я пытаюсь объединить два массива символов в третий массив символов, давайте рассмотрим следующий пример:
В этом коде я уже получил значения в av [1] и av [2].
Просто для примера значений возьмем av [1] = ab и av [2] = fg
main (char *av[])
{
av[2] = av[1] "/" av[2]
printf ("%s" , av[2]);
}
Результат, который я ожидаю, должен быть следующим:
аб / фг
когда я запускаю код, появляется ошибка: ожидаемо ';' перед строковой константой.
Я не думаю, что это проблема.
Я нашел ответ, и вот весь неподтвержденный код, спасибо за помощь. Извините, если он не очень хорошо организован, я все еще учусь.
Следующий код фактически делает то, что делает cp в терминале linux, это просто дублирующая функция cp. он может делать не все, что может делать cp, но он делает большинство вещей.
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/stat.h> /*hearder to use Stat system
call*/
#define BUFFERSIZE 4096
#define COPYMODE 0644
void oops(char *, char *);
main(int ac, char *av[])/*argument vector*/
{
int in_fd, out_fd, n_chars;
char buf[BUFFERSIZE];
if ( ac != 3 ){ /* argument account"ac"*/
fprintf( stderr, "usage: %s source destination\n", *av);
exit(1);
}
printf("%s", av[2]); /*Test deleat after code works*/
struct stat src, dst; // struct is a
variable that combies all types into one
stat(av[1], &src); //stat system call
stat(av[2], &dst); //stat system call
if( dst.st_mode & S_IFDIR ){ // checks
if the second argument int the array is a file or a directory
printf ("\n It is a directory \n");
printf("%s", av[2]);
strcat(av[2],"/"); /* it concatenates two string or character*/
strcat(av[2],av[1]); /* It takes two argument, i.e, two strings or character arrays, and stores the resultant concatenated string in the first string specified in the argument.*/
printf("\n %s",av[2]); /* testing if values are the same as
expected*/
printf("\n %s",av[1]);
}
if ((src.st_dev == dst.st_dev) && (src.st_ino == dst.st_ino)) { /* compering the file attribute of an inode number and the id of device*/
printf("\n Destination file and source file are same \n");
}
else {
if ( (in_fd=open(av[1], O_RDONLY)) == -1 )
oops("Cannot open ", av[1]);
if ( (out_fd=creat( av[2], src.st_mode)) == -1 ) /* "st_mode" indicates the permissions on the file, tells the modes on a file.*/
oops( "Cannot creat", av[2]);
while ( (n_chars = read(in_fd , buf, BUFFERSIZE)) > 0 )
if ( write( out_fd, buf, n_chars ) != n_chars )
oops("Write error to ", av[2]);
if ( n_chars == -1 )
oops("Read error from ", av[1]);
if ( close(in_fd) == -1 || close(out_fd) == -1 )
oops("Error closing files","");
}
}
void oops(char *s1, char *s2)
{
fprintf(stderr,"Error: %s ", s1);
perror(s2);
exit(1);
}