gpt4 book ai didi

c - Pthread 程序在 Codeblocks 和 Linux Kernel 上打印不同的值

转载 作者:太空宇宙 更新时间:2023-11-04 10:10:27 26 4
gpt4 key购买 nike

<分区>

我正在研究以下 pthread 程序,它查找 string2 中 string1 中的子串数:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <pthread.h>
#define NUM_THREADS 4
#define MAX 1024

int n1,n2,i;
char *s1,*s2;
FILE *fp;

char *substring(char *string, int position, int length);
void *occurrence();


int readf(FILE *fp)
{
if((fp=fopen("strings.txt", "r"))==NULL){
printf("ERROR: can't open strings.txt!\n");
return 0;
}
s1=(char *)malloc(sizeof(char)*MAX);
if(s1==NULL){
printf("ERROR: Out of memory!\n");
return -1;
}
s2=(char *)malloc(sizeof(char)*MAX);
if(s1==NULL){
printf("ERROR: Out of memory\n");
return -1;
}
/*read s1 s2 from the file*/
s1=fgets(s1, MAX, fp);
s2=fgets(s2, MAX, fp);
n1=strlen(s1); /*length of s1*/
n2=strlen(s2)-1; /*length of s2*/
if(s1==NULL || s2==NULL || n1<n2) /*when error exit*/
return -1;
return 0;
}

int main(void)
{
pthread_t tid;
pthread_create(&tid, NULL, occurrence, NULL);
pthread_join(tid, NULL);
exit(0);
}

char *substring(char *string, int position, int length)
{
char *pointer;
int c;

pointer = malloc(length+1);

if (pointer == NULL)
{
printf("Unable to allocate memory.\n");
exit(1);
}

for (c = 0 ; c < length ; c++)
{
*(pointer+c) = *(string+position-1);
string++;
}

*(pointer+c) = '\0';

return pointer;
}

void* occurrence()
{
char *string1;
char *string2;
char *new_str;
int counter=0;
readf(fp);

string1 = s1;
string2 = s2;
new_str = malloc(200);
for(i=1;i<=strlen(string1);i++)
{
new_str = substring(string1,i,strlen(string2));
if(strcmp(new_str, string2)==0)
{
counter++;
}
}
printf("The number of substrings is: %d \n",counter);
return 0;
}

当我在代码块上编译它时,它会打印出正确数量的子字符串。然而,当我在 Linux 内核上编译它时,它总是打印 1 作为子字符串的数量,即使有多个。例如,一个第一行有 abdeabjhab 而第二行有 abstrings.txt 文件应该打印 3,因为有 3 个实例ab 在第一行。我的 Linux 内核打印 1。是否有一种特定的方法可以编译它以打印正确的值?我目前正在使用 gcc -pthread substring.c -o substrings 编译和 ./substrings 执行它。

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