【问题标题】:C- Linux- Creating a thread and passing in a bufferC-Linux-创建线程并传入缓冲区
【发布时间】:2018-06-07 05:15:39
【问题描述】:

用户传入输入,该输入存储在 argv[2] 中。我将此值存储到缓冲区中,然后尝试通过我的 pthread_create 函数将该值传递给另一个函数。但是,这会扭曲缓冲区的值。

我传入输入,可能是“Hello”之类的内容,然后当它在“printFiles”函数中打印时,它是乱码。我该如何解决这个问题?

void *printFiles(void *file);

int main(int argc, char **argv)

{
    pthread_t thread;

    char *store = argv[2];

   char *buffer = (malloc(500)); 

   strcpy(buffer, store);

    pthread_create(&thread, NULL, printFiles, (void *)&buffer);
    pthread_join(&thread, NULL);
return 0;


}

void *printFiles(void *file)
{
    printf("%s\n", file);

}

【问题讨论】:

    标签: c linux pthreads


    【解决方案1】:

    buffer 已经是一个指针。当你这样做时,你给线程一个指向指针的指针,然后你把它当作函数中的一个指针来处理:

    pthread_create(&thread, NULL, printFiles, (void *)&buffer);
    

    只需将指针传递给线程:

    pthread_create(&thread, NULL, printFiles, (void *)buffer);
    

    【讨论】:

    • 如果pthread_create() 的原型可见,您可以完全放弃演员表。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多