gpt4 book ai didi

c - C Unix 中的段错误(核心转储)

转载 作者:行者123 更新时间:2023-11-30 18:20:32 24 4
gpt4 key购买 nike

我必须创建一个程序,从命令行获取 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 开始。

关于c - C Unix 中的段错误(核心转储),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19925098/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com