这是代码
#include<stdio.h>
#include<sys/types.h>
#include<stdlib.h>
#include<pthread.h>
typedef struct std_thread
{
char name[20];
int hallno;
int empid;
char dept[5];
}std[5];
void *print(void *args)
{
struct std_thread *data=(struct std_thread *)args;
printf("My thread id is %ld\n",pthread_self());
printf("Thread %d is executing\n",args);
printf("Name\tHall No\tEmployee ID\tDepartment\n");
printf("--------------------------------------------------------");
printf("%s\t%d\t%d\t%s\n",data->name,data->hallno,data->empid,data->dept);
}
int main()
{
pthread_t th[5];
int empid=2020;
int hall=1;
char dept[2]="IT";
char *names[]={"dinesh","vignesh","pradeep","prasath","mohan"};
int t;
int i;
int status;
for(i=0;i<5;i++)
{
std[i].name=names[i]; //Getting error from this line
std[i].hallno=hall; //Error at this line
hall++;
std[i].empid=empid; //Error at this line
empid++;
std[i].dept=dept; //Error at this line
status=pthread_create(&th[i],NULL,print,(void *)&std[i]);
if(status)
{
printf("Error creating threads\n");
exit(0);
}
}
pthread_exit(NULL);
}
在编译此代码时,我在'''token'之前收到“语法错误”。这是什么原因?
答案 0 :(得分:2)
我认为你的意思是typedef
在顶部。
你在那里写的内容使得std
等效类型与数组中的struct
中的五个相同,但是你使用std
就像它本身就是一个数组。
从第五行删除单词typedef
,它应该更接近工作。
答案 1 :(得分:2)
此声明不符合您的想法:
typedef struct std_thread
{
...
}std[5];
这声明struct
名为std_thread
,然后创建名为typedef
的{{1}},表示“5个std
个对象的数组”。< / p>
您可能想要这两个定义中的一个,以便将名为struct std_thread
的全局对象声明为5 std
的数组:
struct std_thread
在第一种情况下,我们还创建名为typedef struct std_thread
{
...
} std_thread;
std_thread std[5];
// OR
struct std_thread
{
..
} std[5];
的{{1}}作为typedef
的别名;在第二种情况下,我们没有。
此外,正如其他人所说,你不能通过赋值来复制字符数组。您必须使用strcpy(3)
或strncpy(3)
等功能复制它们。使用std_thread
时,必须确保目标缓冲区足够大以容纳所需的字符串。另请注意strncpy
does not necessarily null-terminate its destination string,请谨慎使用。
答案 2 :(得分:1)
您正尝试使用赋值来复制字符串:
std[i].name=names[i];
和
std[i].dept=dept;
不起作用。请改用strcpy
或更好strncpy
。
您输入了错字:
std[i].empid=empdid; //Error at this line
您没有名为empdid
的变种。
答案 3 :(得分:1)
使用字符串复制功能而不是分配char数组。
答案 4 :(得分:0)
此代码:
typedef struct std_thread
{
char name[20];
int hallno;
int empid;
char dept[5];
} std[5];
将类型std
声明为5 struct std_thread
个结构的数组。
此代码:
int main()
{
[...]
int i;
int status;
for (i = 0; i < 5; i++)
{
std[i].name = names[i];
假设std
是具有数组或指针类型的变量。
您需要删除关键字typedef
,以使代码与变量的使用保持一致。
然后你可以开始遇到字符串赋值的问题,你需要使用字符串复制函数等。