user3287789
user3287789

Reputation: 121

Issues with structs in C

I have an array in a struct. I'm reading from a file into a string. I use strtok to get the first few characters, and i want to pass the rest of the line into the struct, to eventually be passed into a thread. I'm getting the following error:

incompatible types when assigning to type char[1024] from type char *

Referring to the line indicated below with the comments. It probably has to do with how i'm trying to copy character arrays, but i'm not sure on a better way.

#include <stdio.h>
#include <pthread.h>
#include <stdlib.h>
#include <linux/input.h>
#include <string.h>
#include <time.h>
#include <unistd.h>

typedef struct 
{
    int period; //stores the total period of the thread
    int priority; // stores the priority
    char pline[1024]; // stores entire line of text to be sorted in function. 
}PeriodicThreadContents;  

int main(int argc, char* argv[])
{
    //opening file, and testing for success
    //file must be in test folder
    FILE *fp;
    fp = fopen("../test/Input.txt", "r");

    if (fp == NULL) 
    {
        fprintf(stderr, "Can't open input file in.list!\n");
        exit(1);
    }

    char line[1024];

    fgets(line, sizeof(line), fp);

    //getting first line of text, containing    
    char *task_count_read = strtok(line," /n");
    char *duration_read = strtok(NULL, " /n");

    //converting char's to integers
    int task_count = atoi(task_count_read);

    int i = 0;

    PeriodicThreadContents  pcontents;




    printf("started threads \n");

    while  (i < task_count)
    {
        fgets(line, sizeof (line), fp);
        strtok(line," ");   

        if (line[0] == 'P')
        {
            char *period_read = strtok(NULL, " ");
            pcontents.period = atoi(period_read);           
            printf("%d",pcontents.period);
            printf("\n");

            char *priority_read = strtok(NULL, " ");
            pcontents.priority = atoi(priority_read);   
            printf("%d",pcontents.priority);
            printf("\n");

            printf("\n%s",line);
            memcpy(&(pcontents.pline[0]),&line,1024);
            printf("%s",pcontents.pline);
        }

    }


    return 0;   
}

Upvotes: 0

Views: 599

Answers (3)

BLUEPIXY
BLUEPIXY

Reputation: 40145

strcpy(pcontents.pline, strtok(NULL, " "));

Upvotes: -1

Fernando
Fernando

Reputation: 1450

C cannot handle strings as other languages do. C doesn't have string assignments or comparisons without using auxiliary functions.

In order to copy a string in a buffer you can use:

strcpy(pcontents.pline, line);

Or even (to have a warranty that your string is not longer than 1024 bytes):

memcpy(pcontents.pline, line, 1024);
pcontents.pline[1023] = '\0';

For other string operations check: http://www.gnu.org/software/libc/manual/html_node/String-and-Array-Utilities.html#String-and-Array-Utilities

Upvotes: 2

tommyo
tommyo

Reputation: 551

You need to copy the chars from the buffer into pcontents.pline (assuming pcontents is a PeriodicThreadContents).

Upvotes: 0

Related Questions