C语言代码,段错误,看不出为什么错

题目表述:
对于给定的一个字符串,统计其中数字字符出现的次数。
错误描述:
编译器提示段错误
但是没找出为什么会发生段错误

# include<stdio.h>
# include<string.h>
int main()
{
    int i,n,len,num;
    char *ch;
    scanf("%d",&n);
    while(n--)
    {
        num=0;
        scanf("%s",ch);
        len=strlen(ch);
        for(i=0;i<len;i++)
        {
            if(ch[i]>='0'&&ch[i]<='9')
                num++;
        }
        printf("%d\n",num);
    }   
    return 0;
}

0

4个回答

char *ch;
定义了指针,但是没有分配空间

char *ch; = (char *)malloc(100*sizeof(char));

如果问题解决,麻烦点下回答右边的采纳,谢谢

0
caozhy
weixin_45841714 回复Hold_C: 也谢谢你
一年多之前 回复
Hold_C
Hold_C 多谢了,已采纳!
一年多之前 回复
caozhy
weixin_45841714 char *ch; = 这里多了一个分号,不好意思
一年多之前 回复

没有实例化ch指针,所以你是不能存放东西的,具体的实例化可以用1楼的方法

1

没有实例化ch指针,还有for循环也错了,for(i=0;i<len;i++){}

1
Hold_C
Hold_C 多谢提醒! 忘了用代码块包裹起来,所以有些部分就没有显示出来,已修改
一年多之前 回复

定义指针时需要分配空间,没有实例化ch指针 主要是指针问题

0
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
C语言由于未包含头文件引起的段错误的两个例子
1. 未包含头文件引起函数返回值错误出错代码:myPointer = umalloc(xxx); if (myPointer) { myPointer-&amp;gt;memberA = aaaa; .... }在64位机器上,运行上面代码, 在执行到第4行的时候会出现段错误。原因:在上述代码中, umalloc 是在另一个文件uMem.c 里面定义的, 如下。文件声明在uMem,h中。但是上面...
C语言sprintf使用出现段错误
#include #include void Block(int function_no,int instrument_no) { char *function; char *instrument; char *result; sprintf(function,"%d",function_no); sprintf(instrument,"%d",instrument_no);
C语言段错误调试
有些时候我们在一段C代码的时候,由于对一个非法内存进行了操作,在程序运行的过程中,出现了"段错误"。 呵呵,这种问题我想很多人会经常遇到。遇到这种问题是非常无语的,只是提示了"段错误",接着什么都没 有,如果我们一味的去看代码找太疼苦了,因为我们都相信自己写的代码没问题,现实就是现实。下面介绍一种方法,可以有效的定位出现"段错误的地方"。 当我们的程序崩溃时,内
GDB调试和常见段错误
1.基本命令 1)进入GDB  #gdb test   test是要调试的程序,由gcc test.c -g -o test生成。进入后提示符变为(gdb) 。 2)查看源码  (gdb) l   源码会进行行号提示。   如果需要查看在其他文件中定义的函数,在l后加上函数名即可定位到这个函数的定义及查看附近的其他源码。或者:使用断点或单步运行,到某个函数处使用s进入
C语言段违例,段错误例子
#include #include void bubble(int *s,int length); void swap(int *p,int *q); int main(){ int j; int s[10] = {6,5,8,41,5,3,50,6,10}; bubble(s,10); printf("the result of array i
C语言在子函数中调用malloc申请内存出现段错误
#include &lt;stdio.h&gt; #include &lt;malloc.h&gt; #include &lt;string.h&gt; void test(char *p) { p = (char*)malloc(10 * sizeof(char)); strcpy(*p, "123456789" ); } void main() { char ...
C语言段错误 总结 段错误整理
C语言段错误 总结 段错误整理 C语言段错误 总结 段错误整理
C语言指针段错误
一个网友问了我一个问题,一个C程序运行出现了段错误,这个问题非常好,很多初学者都容易犯这个错误,具体代码如下: 这个编译没有问题,但是运行是段错误    Segmentation fault 因为你定义了一个结构体指针p,用来指向此类结构体,但是你却没有给他赋值,此时p的值为NULL,你并没有在内存中为p分配任何空间,所以p->a=1这句就会出段错误。 修改方法1:可
C语言 使用链表的时候造成 段错误
1.非关联化一个空指针总是导致段错误!   #include &amp;lt;stdio.h&amp;gt;   int main (void) { int *ptr = NULL; *ptr = 0; return 0; } 输出结果: 段错误(核心已转储   非关联化一个空指针,然后分配(写一个值到一...
使用strcat时出现段错误
strcat函数接口如下:
c语言中常见的几个段错误
通常导致段错误的几个直接原因: (1)解除引用一个包含非法值的指针 (2)解除引用一个空指针(常常由于从系统程序中返回空指针,并未检验就使用) (3)在未得到正确的权限时进行访问。例如,试图往一个只读文本段存储值就会引起段错误 (4)用完了堆栈或堆空间(虚拟内存虽然巨大但绝非无限)     以发生频率为序,最终可能导致段错误的常见编程错误是: 1.  坏指针值错误: 在指针赋值之前就用
在Linux下编译时出现段错误应该怎么调试
在产生段错误的时候 采用一般的方法调试是很难发现的 一、先看几个段错误实例 (1) 这是因为指针没有开任何内存空间,所以这个0没有地方去,就会产生段错误 (2) 这个比较简单,0地址是受保护的地址,是系统自己要用的。 (3) 这个一看不太好看,这是因为test是一个字符串常量,他是静态内存里面的,但是通过mallow和new产生的指针申请的空间是动态的,当我们把静态内
C语言再学习 -- 段错误(核心已转储)
参看:Linux下的段错误产生的原因及调试方法参看:Linux环境下段错误的产生原因及调试方法小结参看:维基百科--Segmentation fault参看:LINUX内核段错误调试详细指南精品培训PPT讲义一、什么是段错误?一旦一个程序发生了越界访问,cpu 就会产生相应的保护,于是 segmentation fault 就出现了,通过上面的解释,段错误应该就是访问了不可访问的内存,这个内存区要
关于段错误和栈溢出的问题
段的概念其实在微机原理已经碰到过,代表可执行文件中各个类型信息保存的地方。其中正文段:text用于存储指令,数据段:data用于存储已初始化的全局变量,bss段用于存储未赋值的全局变量所需的空间。 其实还有一个段常听过,叫堆栈段stack。和其他段一样有自己的大小,一旦越界会爆段错误。堆栈段实在运行时,程序动态创建的一个堆栈段,放着调用栈,保存着函数调用关系和局部变量。 关于调用栈,描述函数之
linux下运行程序后出现段错误的原因和解决案例
查了不少资料,好多都说是:地址错误,即你使用了没有声明的地址。 一 一个经典的例子: #include copyString(char *p1,char *p2) {   while(*p1!='\0') {   *p2=*p1;   p1++;   p2++;   }   *p2='\0'; } int main() {   char *a="I am a teacher
C“段错误” : 快速定位“段错误”位置
1、 编译时gcc 1.c -g  ,后边加上-g在运行时产生段错误时会自动生成core.xxxx的文件    (若没有产生这个文件,则在命令行输入ulimit -c umlimited,重新编译运行) 2、用gdb调试    gdb a.out core.xxxx 3、输入where查看详细信息,既可以定位段错误的位置
C语言 递归中的段错误与栈溢出
C语言中,每次递归调用都会多一个栈帧——和普通的函数调用并没有什么不同。由于使用了调用栈,C语言自然支持了递归。在C语言的函数中,调用自己和调用其他函数并没有任何本质区别,都是建立新栈帧,传递参数并修改当前代码行。在函数体执行完毕后删除栈帧,处理返回值并修改当前代码行。 递归调用时新建了一个栈帧,并且跳转到了函数开头处执行,同一时刻可以有多个栈帧,但“当前代码行”只有一个。 “段”(segme
C语言写了一个程序,查了几遍看不出来错误
#include"stdio.h" void main(){ int a[3][3]={{1,2,3},{4,5,6},{7,8,9}}; int b[3][3]; int *p1=a,*p2=b; int x1=0,x2; while(x1     x2=0;     while(x2         *(*(p2+x2)+x1)=*(*(p1+x1)+x1);     
段错误的第5种情况——使用空指针
<br />int main() { char *p = NULL; printf("%s/n",p); return 0; }<br /> <br />使用空指针会出现段错误,要想给字符型指针进行初始化,使用时还不会出现段错误,要像下面这样写:<br />int main() { char *p = ""; printf("%s/n",p); return 0; }
【C++】用sort函数产生的段错误问题
sort函数的cmp必须按照规定来写,即必须只是 > 或者  比如: return a > b; return a  b; 而不能是 = ,(实际上等于号加了也是毫无意义,sort是不稳定的排序),否则可能会出现段错误
用malloc引发的段错误---malloc 与 calloc的区别
前几天找bug找了好久,都没有发现问题所在,昨晚突然发现是malloc分配的空间没有初始化引发的。 下面谈谈malloc与calloc的区别。 函数malloc()和calloc()都可以用来动态分配内存空间,但两者稍有区别。     malloc()函数有一个参数,即要分配的内存空间的大小: void *malloc(size_t size);   calloc()函数有两个参数,
递归出现Segmentation Fault(段错误)以及为什么要把较大的数组放在main函数外
”段”(segmentation)是指二进制文件内的区域,所有某种特定类型信息被保存在里面。可以用size程序得到可执行文件中各个段的大小。如刚才的factorial.c,编译出a.exe以后执行size的结果是: D:\&amp;gt;size a.exe text data bss dec hex filename 2756 740 224 3720 e8...
PAT 1020月饼的代码实现及错误分析(C语言)
题目 月饼是中国人在中秋佳节时吃的一种传统食品,不同地区有许多不同风味的月饼。现给定所有种类月饼的库存量、总售价、以及市场的最大需求量,请你计算可以获得的最大收益是多少。 注意:销售时允许取出一部分库存。样例给出的情形是这样的:假如我们有3种月饼,其库存量分别为18、15、10万吨,总售价分别为75、72、45亿元。如果市场的最大需求量只有20万吨,那么我们最大收益策略应该是卖出全部15万吨第...
PAT 1015德才论的代码实现及错误分析(C语言)
题目 宋代史学家司马光在《资治通鉴》中有一段著名的“德才论”:“是故才德全尽谓之圣人,才德兼亡谓之愚人,德胜才谓之君子,才胜德谓之小人。凡取人之术,苟不得圣人,君子而与之,与其得小人,不若得愚人。” 现给出一批考生的德才分数,请根据司马光的理论给出录取排名。 输入格式: 输入第1行给出3个正整数,分别为:N(&amp;lt;=10^5^),即考生总数;L(&amp;gt;=60),为录取最低分数线,即德分...
gcc编译通过,运行却显示“段错误”的解决方法
​第一次在Liunx上(liunx mint 17)使用gcc编译c文件,竟然提示“找不到stdio.h",经过google后发现执行 sudo apt-get install build-essential即可,详见:http://slipper-99933.blog.163.com/blog/static/39954044201021651833785/​。     ​刚学习了柔性数组,照教
【整理】Linux C 段错误处理方法
  最近组长给我安排了一个多线程异常检测的任务,主要就是捕捉sigsegv这个信号,并进行处理,保证该线程不崩溃,环境是linux C。下面给大家分享一些学习经验。 一、Linux的signal处理机制   关于linux signal机制的基本原理,给大家分享一篇很好的帖子:https://blog.csdn.net/thanksgining/article/details/418244...
C语言:scanf()语句错误读取
scanf()语句错误读取     在上一星期的文章中,每一次遇到功能选择时,总是会以输入选项所代表的数字表示,而在让一个学长帮忙看看时,发现一个问题:当输入不是数字时scanf()语句将保持不读取状态,当程序运行到这里时
如何解决 “ 段错误(吐核) ” ???
一、段错误的形式:        在编程中以下几类做法容易导致段错误,基本上是错误地使用指针引起的。 1)访问系统数据区,尤其是往系统保护的内存地址写数据最常见就是给一个指针以0地址。 2)内存越界(数组越界,变量类型不一致等): 访问到不属于你的内存区域。 解决方法:我们在用C/C++语言写程序的时候,内存管理的绝大部分工作都是需要我们来做的。实际上,内存管理是一个比较繁琐的工作,无论你...
linux下C编程free()时出现飘忽诡异的段错误(核心已转储)问题
先说一下问题现场。 代码如下 free(volthisframe->Tops); free(volthisframe->Bots); printf("what\n"); free(volthisframe->SCTops); free(volthisframe->SCBots); 运行时出现段错误,“what”随机出现,也就是说可能是打印前出现段错误,也可能是打印后出现
在Linux C/C++中捕获段错误
在Linux C/C++中捕获段错误 关于段错误 所谓的段错误就是指访问的内存超出了系统所给这个程序的内存空间,在编程中几类做法容易导致段错误,基本上是错误地使用指针引起的。 1)      访问系统数据区,尤其是往系统保护的内存地址写数据最常见就是给一个指针以0地址。 2)      内存越界(数组越界,变量类型不一致等):访问到不属于你的内存区域。   解决方法:我们在用C/C++
内核段错误定位方法
1.加printk 2.在配置文件配置 以下选项则出错时会在backstrace打印出错函数 CONFIG_FRAME_POINTER=y CONFIG_DEBUG_KERNEL=y 3. 找到内核编译出的System.map,里面包含内核编译出的符号表,注意这其中不包含insmod加载的 如果需要知道所有的,可以在平台使用串口查看/proc/kallsyms 如果/proc/kall...
线程池出现段错误
经过排查发现相同的连接套接字会被处理多次,在发送完图片后会删除相应图片,因此最终导致段错误。不使用线程池发现请求队列的加锁没有问题,因此问题定位到线程池部分。 最终发现是线程池中加速力度不够,在往线程池中添加任务时,一部分代码没有在锁内,导致出错。 另一个错误是传递给线程池中工作线程的参数是局部变量的指针,当传递给工作线程时他没有能够立即执行,有其他线程抢占,因此该内存地址中的值已经变化了,获
linux在main函数结尾出现段错误的问题
项目中需要用到sqlite来存储一些临时数据,sqlite本来我就不熟,还好老外的东西文档比较齐全。所以在这边花的时间还不算长,最崩溃的是,调试程序的时候出现在main函数的结尾出现了段错误。gdb 调试了半天,也跟踪不出来,core文件也显示在main函数的结尾。。 最终的问题竟然是 main函数内的一个数据出现越界的情况,为了测试这个结论,我写了如下程序  1 #include
【ARM-Linux开发】通过GDB快速定位“段错误”的位置
有些时候我们在一段 C/C++ 代码的时候,由于对一个非法内存进行了操作,在程序运行的过程中,出现了“Segmentation fault (core dumped)”——段错误。呵呵,这种问题我想很多人会经常遇到。遇到这种问题是非常无语的,只是提示了&quot;段错误&quot;,接着什么都没有,如果我们一味的去看代码找太疼苦了,因为我们都相信自己写的代码没问题,现实就是现实。接着,我们可能通过打印来定位到段错误的...
C语言gdb分析段错误的core文件
C语言gdb分析core文件
64位linux下inet_ntop()返回值竟然为int,printf报段错误
inet_ntoa()在CENTOS532位版和64为机器上结果不一样。    printf(" address:%s\n",                                                                                                                        inet_ntop(hp
为什么strcmp 和strncmp会出错
char buf[] = {0x01, 0x08, 0x00, 0x00, 0xA5, 0x37, 0xbe, 0xda, 0}; char buf2[] = {0x01, 0x08, 0x00, 0x00, 0xA5, 0x37, 0xda, 0xbe, 0}; if
C/C++捕获段错误,打印出错的具体位置(精确到哪一行
C/C++捕获段错误,打印出错的具体位置(精确到哪一行) 2011-05-14 03:42:38 分类: LINUX 其实还可以使用 glibc 的 backtrace_symbols 函数,把栈帧各返回地址里面的数字地址翻译成符号描述的 修订:2011-06-11 背景知识: · 在linux/unix中的信号处理机制,知道signal函数与sigact
ubuntu C 语言 段错误 (核心已转储)
原文链接:http://blog.csdn.net/ralbatr/article/details/8374265 一 般来说,段错误就是指访问的内存超出了系统所给这个程序的内存空间,通常这个值是由gdtr来保存的,他是一个48位的寄存器,其中的32位是保存由它指 向的gdt表,后13位保存相应于gdt的下标,最后3位包括了程序是否在内存中以及程序的在cpu中的运行级别,指向的g
strcmp/strncmp导致的段错误浅析
引出问题 项目中有如下代码片段: #include &amp;amp;lt;stdio.h&amp;amp;gt; #include &amp;amp;lt;string.h&amp;amp;gt; struct st { char *buf; int buflen; }; static void st_test(struct st *st) { char *msg = &amp;quot;abc&amp;quot;; /* 若注释下行代码会导致段错误...
文章热词 机器学习教程 Objective-C培训 交互设计视频教程 颜色模型 设计制作学习
相关热词 mysql关联查询两次本表 native底部 react extjs glyph 图标 为什么学python 为什么学习产品经理

相似问题

0
请问我这个程序为什么内存超限
2
将一个字母a赋给int型变量,运行第一个是无限循环的,为什么呀?谢谢呀
2
编程实现找出字符串中最大字符元素并输出该元素及其对应的ASCII值 请问为什么运行显示无输出?
1
整数的质因子分解 为什么time limit exceed
1
新人求解为什么无法输出?
1
新人求解为什么输不出no?
0
为什么会有垃圾数据啊
1
运行程序输出Ilovyu中间为什么没有空格呢?
1
无法输出矩阵,在赋值时只能赋一个值,请问错在哪里了?
1
请问三天打鱼两天晒网的代码错在哪里,无法运行但没有显示错误
3
请教一个c语言指针和编译方面的问题,见下图。请问最后输出结果为什么会是NULL指针??
2
为什么第一种做不出来,和第二种有什么区别?
2
为什么这个程序过不了内存检查??求助。。。
2
1054 求平均值 V1 提问?字号大的那几行什么意思。为什么a[j]!=b[j]判断可以检测出输入有误的部分?
4
为什么我这个程序只能输入一次 而且不能输出?
1
为什么for循环里的定义会影响后面的for循环啊
2
这个问题不知道为什么出来的数字不对 想请教一下该改正哪里 用c-free写的?
1
我要被这道题逼疯了!为什么这个字符串数组有的时候不输出呢??
2
c语言新手 为什么这个代码的除法输不出来结果啊?
0
C语言加壳为什么修改CONTEXT之后恢复线程时程序还是会崩溃?求大佬指点