qfedu-linux-advanced-level/day6/homework/h5.c

50 lines
1.2 KiB
C

// 编写一个程序, 创建一个线程, 该线程从标准输入读取字符串, 然后将字符串逆序输出。
#include <stdio.h>
#include <pthread.h>
#include <string.h>
#include <stdlib.h>
void *reverseOrder(void *data)
{
char *src_str = (char *)data;
int start = 0;
int end = strlen(src_str) - 1;
// 动态分配内存来存储反序的字符串,确保在主函数中使用 pthread_join 获取线程的返回值时,该字符串仍然有效
char *dst_str = (char *)malloc((strlen(src_str) + 1) * sizeof(char));
strcpy(dst_str, src_str);
while (start < end)
{
// 交换起始位置和末尾位置的字符
char tmp = dst_str[start];
dst_str[start] = dst_str[end];
dst_str[end] = tmp;
// 移动指针
start++;
end--;
}
pthread_exit(dst_str);
}
int main(int argc, char const *argv[])
{
if (argc != 2)
{
printf("用法: %s 字符串\n", argv[0]);
return 0;
}
pthread_t tid;
pthread_create(&tid, NULL, reverseOrder, (void *)argv[1]);
char *dst_str;
pthread_join(tid, (void **)&dst_str);
printf("字符串反序后为:\n%s\n", dst_str);
// 释放动态分配的内存
free(dst_str);
return 0;
}