我必须创建一个从命令行获取n个参数arg1,arg2 .... argn的程序,创建n个线程,并且每个线程都将读取文本文件argi并以相反的顺序打印偶数行。

问题是我的程序创建了线程,完成了线程,但实际上他什么也没做。他只打印一些随机字符,每个运行时都不同(我认为是内存中的字符)。

下面是我的代码:

#include <pthread.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#define MAXLINE 100
pthread_t myThread[10];
pthread_mutex_t myMutex;

void * fileprint(void * numei) {
    printf("Thread: %ld ...> %s\n", pthread_self(), (char*)numei);
    FILE *fi;
    char line[MAXLINE], *p;
    pthread_mutex_lock(&myMutex);
    int k=0;
    fi = fopen((char*)numei, "r");
    for ( ; ; ) {
        k++;
        p = fgets(line, MAXLINE, fi);
        if (p == NULL) break;
        line[strlen(line) - 1] = '\0';
        if(k %2 ==0){
            for(int j=strlen(line);j>=0;j++){
                printf("%c", line[j]);
            }
        printf("%c","\n");
        }
    }

    fclose(fi);

    printf("Finished thread: %ld ...> %s\n", pthread_self(), (char*)numei);
    pthread_mutex_unlock(&myMutex);

}


int main(int argc, char* argv[]) {
    pthread_mutex_init(&myMutex, NULL);
    printf("I'm the father...\n");

    int i;
    for (i = 1; argv[i]; i++) {
        pthread_create(&myThread[i], NULL, fileprint, (void*)argv[i]);
        printf("Created thread: %ld ...> %s\n", myThread[i], argv[i]);
    }


    for (i = 1; argv[i]; i++) {
        pthread_join(myThread[i], NULL);
    }

    printf("I'm still the father...\n");


    pthread_mutex_destroy(&myMutex);

    return 1;
}


那么,谁能告诉我这是什么问题?我尝试了很多修改的东西,但是什么也没做...

最佳答案

如果向后移动字符串,则必须减少循环内的索引(j--)。另外,您应该从strlen(x)-1开始。

07-24 19:18
查看更多