我在重新类型转换我传递给线程处理函数的字符串数组时遇到问题。我无法将userIn
强制转换回字符串数组。请注意。
static char *command;
void *thread_handler1 (void *userIn)
{
char filename1[20]= (char *)userIn;
puts("inside thread");
printf("%u",(int)userIn);
//printf("%u",filename1);
if(strcmp(command,"monitor")==0)
{
dms_monitor(filename1);
printf("%s",filename1);
}
}
void transact_client(int sock)
{
int i;
char recvbuffer[MAX_BUFFER_SIZE];
char delimiter[]=" ";
char *result=NULL;
char *filename[10];
int rdcount=0;
int index=0;
//struct file userFile[20];
// char *command;
pthread_t pid;
if((rdcount=recv(sock,recvbuffer,sizeof(recvbuffer),0))==-1)
perror("Problem with file descriptor");
result=strtok(recvbuffer,delimiter);
command=result;
printf("the command is %s\n",filename[0]);
while(result != NULL)
{
// printf("result is \"%s\"\n",filename[index]);
result=strtok(NULL,delimiter);
filename[++index]=result;
printf( "result is \"%s\"\n", filename[index-1]);
}
printf("%u",filename);
pthread_create(&pid,NULL,thread_handler1,&filename);
pthread_detach(pthread_self());
答案 0 :(得分:1)
问题在于这一行:
char filename1[20]= (char *)userIn;
右侧是char *,左侧是char数组。
如果userIn
指向一个字符串,则无需尝试为其分配新空间。
请改为尝试:
char *filename1 = (char *)userIn;
修改强>
transact_client
中也存在许多错误。
filename
被声明为指针数组。这真的是你想要的吗?
filename[0]
分配值。
&filename
(char***
)被发送到需要char *的函数。
答案 1 :(得分:0)
char filename1[20]= (char *)userIn;
是错误的方式。
尝试
char *filename1 = (char *)userIn;
第一种情况,filename1被声明为char数组。建议的解决方案是将filename1更改为char指针,可以使用类型转换userIn。
进行分配修改char数组的基址可以得到Un预期的行为。