代碼如下
#include<stdio.h>
#include<pthread.h>
#include<ctype.h>
pthread_mutex_t counter_clock = PTHREAD_MUTEX_INITIALIZER;
static int total_words=0;
int main(int ac , char *av[]){
void *count_words(void*);
if(ac!=3){
printf("Useage:%s file1 file2 \n",av[0]);
exit(1);
}
int error1,error2;
pthread_t thread1,thread2;
error1 = pthread_create(&thread1, NULL, count_words, av[1]);
error2 = pthread_create(&thread2, NULL, count_words, av[2]);
pthread_join(thread1,NULL);
pthread_join(thread2,NULL);
printf("%d\n",total_words);
}
void *count_words(void* f){
char *filename=(char*)f;
FILE *fp;
int c,prevc='\c';
if((fp=fopen(filename,"r"))!=NULL){
while((c=getc(fp))!=EOF)
{
if(!isalnum(c)&&isalnum(prevc)){
pthread_mutex_lock(&counter_clock);
total_words++;
pthread_mutex_unlock(&counter_clock);
}
prevc=c;
}
fclose(fp);
}
else {
perror(filename);
}
return NULL;
}
這是一個多執行緒統計單詞個數的程式,具體代碼不重要,我就是想問問這一行
if((fp=fopen(filename,"r"))!=NULL){
當我把雙引號改成單引號時就會出現Segmentation fault (core dumped)的錯誤,但我上網好像看到也有使用單引號的,求大神解答,謝謝
uj5u.com熱心網友回復:
fopen()用法,供參考:https://blog.csdn.net/weixin_33878457/article/details/85712854?utm_medium=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-1.control&dist_request_id=1331978.858.16185879177551633&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-1.controlSegmentation fault (core dumped)的錯誤,這句話意思就是段錯誤(核心轉儲),Core Dump 是作業系統在行程收到某些信號而終止運行時,將此時行程地址空間的內容以及有關行程狀態的其他資訊寫出的一個磁盤檔案。在這里出現這問題,按你的描述就是操作檔案時出現無法決議的字符,所以上面給了fopen()用法鏈接供參考。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/276772.html
標籤:C語言
