@LosGnidoS

Почему здесь выдает ERROR:Segmentation fault (core dumped)?

решаю задачу по реализации потока , а в нем копировании содержимого одного файла в другой.Программу написал,реализовал аргументы функции через структуру.Вроде бы все по фен-шуй..Но, во-первых,компилятор недоволен,во-вторых, при непосредственном запуске программы выдает ошибку с памятью..не понимаю в чем состоит ошибка.Как такового выделения памяти не нужно, т.к. создаю файлы(открываю) посредством системных вызовов.Так же, компилятор выдает несколько предупреждений1):

1. 32 line warning: passing argument 1 of ‘open’ makes pointer from integer without a cast [-Wintconversion]

2. note: expected ‘const char *’ but argument is of type ‘char’

3. 35 line warning: format ‘%s’ expects argument of type ‘char *’, but argument 3 has type ‘int’ [-Wformat=]

4. 53 line warning: assignment to ‘char’ from ‘char *’ makes integer from pointer without a cast [-Wint-conversion]

Исходник:

#include <stdio.h>
#include <pthread.h>
#include <fcntl.h>
#include <sys/types.h>
#include <unistd.h>

#define BUF_SIZE 4096


struct thread_arg
{
    char* file, file2;
};

void * cp_sys (void * arg)
{
    char buffer[BUF_SIZE];  
    struct thread_arg targ = *(struct thread_arg *) arg;

    int in,out;
    ssize_t bytes;

    

    in = open( targ.file, O_RDONLY | O_CREAT );
    if (in == -1)
    {
        fprintf(stderr,"Cannot open file %s\n", targ.file);
        return NULL;
    }

    out = open( targ.file2, O_WRONLY | O_CREAT | O_TRUNC, 0640);
    if ( out == -1 )
    {
        fprintf(stderr, "Cannot creat file %s\n", targ.file2);
        return NULL;
    }

    while ((bytes = read ( in, buffer, BUF_SIZE)) > 0)
        write (out , buffer, bytes );

    close (in);
    close (out);
    return NULL;
}

int main (void)
{
    pthread_t thread;
    int result;
    struct thread_arg targ;
    targ.file = "file.in";
    targ.file2 = "file.out";


    result = pthread_create(&thread, NULL, &cp_sys, &targ);

    
    while(1);

    return 0;
}


Объясните,пожалуйста, в чем стоят ошибки данного кода. Заранее спасибо за ответ!!
  • Вопрос задан
  • 88 просмотров
Пригласить эксперта
Ответы на вопрос 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
char* file, file2;
Это объявление эквивалентно
char *file;
char file2;

Вы, вероятно, хотели объявить
char *file, *file2;
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
2Reallife Москва
от 150 000 до 170 000 ₽
Quadcode Санкт-Петербург
от 130 000 до 180 000 ₽
GETMOBIT Москва
До 170 000 ₽
29 нояб. 2020, в 23:56
20000 руб./за проект
29 нояб. 2020, в 22:37
500 руб./за проект
29 нояб. 2020, в 20:54
3000 руб./за проект