求助,c语言简单问题

Little BigUs 2021-04-16 10:36:35
代码如下
#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)的错误,但我上网好像看到也有使用单引号的,求大神解答,谢谢
...全文
150 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
自信男孩 2021-04-17
  • 打赏
  • 举报
回复
Segmentation fault (core dumped)指段错误,一般指非法地址访问,就是访问到不可以读写的内存位置,这是系统从安全角度,保证系统正常运行所必须的~

比如一个系统才能访问的地址,一个自定义程序去访问(比如读写)这个地址上的内容,那么就可能导致系统异常,因此不允许其访问~
Little BigUs 2021-04-17
  • 打赏
  • 举报
回复
引用 5 楼 forever74的回复:
是啊,那里不能单引号。
哦,好的,谢谢
Little BigUs 2021-04-17
  • 打赏
  • 举报
回复
引用 5 楼 forever74的回复:
是啊,那里不能单引号。
哦,好的,谢谢
forever74 2021-04-17
  • 打赏
  • 举报
回复
是啊,那里不能单引号。
Little BigUs 2021-04-17
  • 打赏
  • 举报
回复
引用 2 楼 forever74的回复:
Error CFFFF: 楼主眼花看错了。
是说单引号是错误的使用方法吗
Little BigUs 2021-04-17
  • 打赏
  • 举报
回复
是说单引号是错误的使用方法吗
forever74 2021-04-17
  • 打赏
  • 举报
回复
Error CFFFF: 楼主眼花看错了。
家有萌宝V 2021-04-17
  • 打赏
  • 举报
回复
不过引号里面的内容不是单个字符,就不要用单引号吧。虽然PHP里面单引号可以替代双引号,但是C/C++这类严谨的语言用不得
qzjhjxj 2021-04-16
  • 打赏
  • 举报
回复
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.control Segmentation fault (core dumped)的错误,这句话意思就是段错误(核心转储),Core Dump 是操作系统在进程收到某些信号而终止运行时,将此时进程地址空间的内容以及有关进程状态的其他信息写出的一个磁盘文件。在这里出现这问题,按你的描述就是操作文件时出现无法解析的字符,所以上面给了fopen()用法链接供参考。
一.C语言基础 1.C语言特点(识记); 2.C语言程序基本组成(识记): 3.基本数据类型: 3.1 标识符与基本数据类型(识记), 3.2 常量与变量(领会) 3.3 内存的概念(识记) 4.基本输入、输出函数(领会): 5.运算符与表达式(简单应用): 5.1 运算符的优先级与结合性 二.程序控制结构 1.C语言的语句(识记): 2.顺序结构(领会): 3.分支结构(简单应用): 4.循环结构(综合应用): 5 算法特点 6 流程图 三.构造型数据 1.数组(综合应用): 1.1 定义和引用 1.2 字符数组 1.3 指针和数组 2.结构类型: 2.1 结构类型的概念 2.2 结构类型定义及结构变量说明 2.3 结构变量的初始化 2.4 结构数组的初始化 3.联合类型(识记): 3.1 联合类型的概念 3.2 联合类型定义和联合变量说明 3.3 联合类型的使用 3.4 Struct 和 Union区别 4.枚举型(识记): 4.1 枚举型的定义 4.2 使用枚举型变量 5.typedef的用途(识记): 四.指针 1.指针与指针变量(识记): 2.指针运算符(领会): 3. 指针与函数 4.指针数组与指向指针的指针(识记): 5.指针与结构(领会): 6. 难点和易混淆 五.函数 1.常见的系统库函数(识记): 2.用户自定义函数(简单应用): 2.1函数定义 2.2 函数调用 2.3 函数声明 2.4 函数返回值 2.5 函数参数 3.函数之间的数据传递(领会): 4.函数的嵌套调用及递归调用(领会): 5.局部变量与全局变量(识记): 6.变量的存储类型与变量的初始化(领会): 7.编译预处理(领会): 六.文件 1.文件的基本概念,C语言中的两种文件(识记) 2.文件的打开、关闭和文件结束测试,文件的读写,文件的定位(识记) 2.1文件操作函数 2.2 文件权限 七.算法与编程(综合应用) 1 使用Turbo C集成开发环境调试程序 1.1.源程序的编写、编辑与改错(领会); 1.2.集成环境下的求助Help(识记); 1.3.程序的编译与目标代码的生成(识记); 1.4.程序的调试(综合应用): 1.5.了解Turbo C程序的常见错误提示(识记)。 2 重点编程题 八 位运算 1. & 2. | 3. ^ 4. ~ 5. << 6. >> ———————————————— 版权声明:本文为CSDN博主「kaikai_sk」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/kaikai_sk/article/details/106061539
我们将会学到以下内容: 源程序编译 Makefile的编写 程序库的链接 程序的调试 头文件和系统求助 -------------------------------------------------------------------------------- 1.源程序的编译   在Linux下面,如果要编译一个C语言源程序,我们要使用GNU的gcc编译器. 下面 我们以一个实例来说明如何使用gcc编译器. 假设我们有下面一个非常简单的源程序(hello.c): int main(int argc,char **argv) { printf("Hello Linux/n"); } 要编译这个程序,我们只要在命令行下执行: gcc -o hello hello.c   gcc 编译器就会为我们生成一个hello的可执行文件.执行./hello就可以看到程 序的输出结果了.命令行中 gcc表示我们是用gcc来编译我们的源程序,-o 选项表示 我们要求编译器给我们输出的可执行文件名为hello 而hello.c是我们的源程序文件.   gcc编译器有许多选项,一般来说我们只要知道其中的几个就够了. -o选项我们 已经知道了,表示我们要求输出的可执行文件名. -c选项表示我们只要求编译器输出 目标代码,而不必要输出可执行文件. -g选项表示我们要求编译器在编译的时候提 供我们以后对程序进行调试的信息.   知道了这三个选项,我们就可以编译我们自己所写的简单的源程序了,如果你 想要知道更多的选项,可以查看gcc的帮助文档,那里有着许多对其它选项的详细说 明. 2.Makefile的编写 假设我们有下面这样的一个程序,源代码如下:

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧