在C中从void *转换为char **

时间:2012-08-21 11:20:24

标签: c unix pthreads

我在重新类型转换我传递给线程处理函数的字符串数组时遇到问题。我无法将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());

2 个答案:

答案 0 :(得分:1)

问题在于这一行:

    char filename1[20]= (char *)userIn;

右侧是char *,左侧是char数组。 如果userIn指向一个字符串,则无需尝试为其分配新空间。

请改为尝试:

    char *filename1 = (char *)userIn;

修改

transact_client中也存在许多错误。

filename被声明为指针数组。这真的是你想要的吗?

永远不会为

filename[0]分配值。

&filenamechar***)被发送到需要char *的函数。

答案 1 :(得分:0)

char filename1[20]= (char *)userIn;

是错误的方式。

尝试

char *filename1 = (char *)userIn;

第一种情况,filename1被声明为char数组。建议的解决方案是将filename1更改为char指针,可以使用类型转换userIn。

进行分配

修改char数组的基址可以得到Un预期的行为。