C语言字符串数组溢出

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言字符串数组溢出相关的知识,希望对你有一定的参考价值。

如图所示,字符串str1有20个字符,空间足以在后面接上str2了,什么还会出现数组溢出?

参考技术A

#include <stdio.h>
#include <string.h> 

int main() 
    char str1[20] = "You ";
    char str2[5] = "are ";//4个字符宽度是不够的。
    strcat(str1,str2);
    printf("%s\\n",str1);
    return 0;

本回答被提问者采纳

c语言 判断两数相乘是不是溢出

代码是:(int 为32位,使用longlong 64位精度判断)
int tmult_ok(int x,int y)
{long long pll=(long long)x*y;
return pll==(int)pll;}
(有些地方看不懂,1.x不是被强制转化成64位的么,64位能和32位的相乘?2.最好举个例子结合代码讲解一下)
那pll==(int)pll怎么解释?pll直接截成32位再和原来的64位比有什么意义?

当要发生类型转换时,如果是像更高精度的类型转换,编译器会进行隐式的转换,也就是说,你用64位的X去和32位的Y相乘,编译器就会隐式的把Y转换成64位的,因为精度更高,并不会发生数据丢失,所以不会有任何错误报告 参考技术A 隐式转换,不足补零,从32为转换64位不会产生数据丢失,从高位转向低位,注意数据丢失。

以上是关于C语言字符串数组溢出的主要内容,如果未能解决你的问题,请参考以下文章

C语言strcpy()函数,字符数组复制

C语言,字符串中,溢出字符(ASCII码=27)怎样处理?

C语言中如何用gets();语句来接收一个二维数组

当我溢出分配的字符数组时,为啥我的 C 程序不会崩溃?

c语言中的strcpy啥意思,简单点解释

《C与指针》第九章练习