99问答网
所有问题
C语言strcat(a,c),字符串a的长度明显不够,为啥不出错?
要求不是足够大吗,为啥这也可以?求解!具体如图。
举报该问题
推荐答案 2020-02-03
因为strcat函数是不安全的。虽然数组a的长度是4,但将c连接到a的后面时,不会进行越界检查,而是直接将c追加到a的后面。这样,就会占用不属于a的内存,所以运行程序时可能出现多种情况,比如:
1.
程序奔溃
2.
表现正常
3.
没奔溃,但程序出现莫名其妙的现象
这3种可能都有可能出现,出现2实属侥幸,说不定下次运行时就会出现情况1或3。
温馨提示:答案为网友推荐,仅供参考
当前网址:
http://99.wendadaohang.com/zd/vWvztWtOtOXB7XtXBeX.html
其他回答
第1个回答 2020-01-29
strcat()函数执行是把字符串b连接到字符串a的后边,也就要求字符串a要足够长,能装下b,而你这样定义的字符串a和b都是字符串字面量,也叫着字符串常亮,很明显前边字符串长度是固定的4字节,不仅不够增加后边字符串长度而且还是不可修改的,所以运行一定出错,要是在linux下运行将产生一个段错误。修改可以把a定义成这个样子:char a[10] = "tom";
追问
可,打印结果是对的~_~,没出错,为啥。我用visual studio 2010打C语言
本回答被网友采纳
相似回答
C语言
问题, 大家帮忙看一下,有什么问题。#include<stdio.h> void ca...
答:
s1溢出了,它
的长度
只有 njj+结束符,存不下 njjjb+结束符 简单点的话,你就弄个定长的吧 char s1[32]="njj"完善点的话,就用楼上的,自己分配个 长度= strlen(s1)+strlen(s2)+1 的来存 cat的结果
...将两个
字符串
连接起来
,(
1)用
strcat
函数(2
)不
用strcat函数。_百度...
答:
str1[cou1] = '\0';// 对处理过的
字符串
加上结束标志'\0',没有'\0'就是字符数组不是字符串 printf("new string is:\n%s\n",str1);// 输出处理过的字符串 return 0;}
设两个
字符串
"Beijing"、"China"分别存放在字符数组str1[10],str2...
答:
当然是A
strcat(
const char * Destination, const char * Sourse);函数原型明显是资源
字符串
连接到目标字符串 并且第二个内存会越界,常量字符串存储在静态区,静态区内存只读,在“beijing”后内存写入程序会崩溃 本回答由提问者推荐 举报| 答案纠错 | 评论 6 3 marilynbkun 采纳率:43% 来自:芝麻团 擅长: 暂未...
C语言
程序设计题、实现两个
字符串的
连接、
答:
C中的字符串都是由一个char指针指向
字符串的
第一个字符,用'\0'(ASCII码值为0)来表示字符串的结尾 while (*p1!='\0') p1++; //表示p1指针没有到字符串尾时就跳到下一个字符 以上循环结束后p1指针肯定指向字符串的结尾了 然后 while (*p2!='\0'){*p1=*p2,p1++;p2++}//这里是把...
C程序
高手帮忙给个答案
答:
最简单的方式:include<stdio.h> char * charlink(char *p, char *q){ char *pp=p;char *qq=q;while(*pp!='\0') pp++;while(*qq!='\0') *pp++=*qq++;pp='\0';return p;} main(){ char a[10]="aaa";char *b="bbb";printf("%s\n",charlink
(a,
b));} ...
C语言
笔试题!求答案!另送100积分!
答:
a是一个字符型指针变量,起内容为字符串”abc”的首地址
,字符串
”abc”存放在常量区。b[ ]占4个字节,b[0]=’a’ ,b[1]= ‘b’,b[2]=’ c’,[3]=’\0’c[3]占3个字节,c[0]=’a’ ,c[1]= ‘b’,c[2]= ‘c’2.以下为Windows NT下的32位
C程序,
请填空 。例如:int...
用
C语言
编写的反转句子 如把: what is your name 换成 name your is...
答:
自己写的一个,用C标准库字符串函数实现的,指针用不好很容易出错。主要思路:将整个句子以空格“ ”分割成多个
字符串,
保存在临时数组str_tmp[MAXLEN][20]中;将临时数组反序写入到str_reverse[MAXLEN]中,输出就可以了。源程序:include <stdio.h> include <string.h> define MAXLEN 80 void ...
C++中不能把
字符串
常量赋值给字符型指针?看下面的图片
答:
也就是等价于 const char *p="abc"你用strcat,就改变了p1的值了,所以报错 解决方法如下:方法一:char s1[]="abc", s2[2]="def";char *p1, *p2;p1=s1;p2=s2;
strcat(
p1, p2);方法二:把程序用Release编译看看可以用不,VC6下Debug模式下式常量,Release就是普通变量了 ...
啥叫“负溢出”?
答:
这样只要str
的长度
大于16,就会造成buffer的溢出,使程序运行出错。存在象strcpy这样的问题的标准函数还有
strcat(),
sprintf(),vsprintf(),gets(),scanf(),以及在循环内的get
c(),
fgetc(),getchar()等。在
C语言
中,静态变量是分配在数据段中的,动态变量是分配在堆栈段的。缓冲区溢出是利用堆栈段的溢...
大家正在搜
c语言求字符串的长度并输出
计算最长的字符串长度c语言
c语言strlen计算字符串长度
c语言判断字符串长度的函数
c语言字符串长度怎么看
c语言判断字符串长度
c语言读取字符串长度
c语言字符数组长度
c语言字符串字节数怎么计算
相关问题
c语言关于strcat函数使用报错的疑问。
c语言程序,将字符串b接在字符串a后,输出长度和新的字符串,...
C语言strcat函数怎么用
c语言中怎样用strcat两个字符串链接在一起
C语言,strcat连接函数,把第二个字符串连接到第一个字符...
不太理解C语言strcat()函数的输出
c语言编程,利用函数把字符数组b,连接到字符数组a的后面,并...