Мне нужно объединить два массива символов в третий массив символов на языке c - PullRequest
0 голосов
/ 18 мая 2019

Я пытаюсь объединить два массива символов в третий массив символов, давайте рассмотрим следующий пример:

В этом коде я уже получил значения в 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);
}

Ответы [ 2 ]

0 голосов
/ 18 мая 2019

Если все, что вы хотите сделать, это распечатать результат, просто сделайте это:

printf("%s/%s", av[1], av[2]);
0 голосов
/ 18 мая 2019

Попробуйте функцию strcat из <string.h>

Очень простой пример:

char a[15] = "Hello";
char b[] = "World";

strcat(a, " ");
strcat(a, b);

printf("%s", a);

Выход:

Hello World

Просто убедитесь, что в массиве символов назначения достаточно места для хранения всей объединенной строки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...