50 lines
1.2 KiB
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;
|
||
|
}
|