社区
C语言
帖子详情
关于c一个简单的问题
volcan1987
2012-06-27 09:58:47
char str1[] = "abcdeft";
const char *str2 = "1111";
strcat(str1, str2);
printf("%s", str1);
这样写合法吗?
我在想,str1是一个数组,那么它初始分配的内存肯定是固定的,但是当调用strcat后,在他末尾又添加了一些东西。
假如在内存分配时,str1后面的内存被分配了,那么我调用了strcat,肯定会把这里内存的内容改写了,那程序肯定会出问题啊?
...全文
210
5
打赏
收藏
关于c一个简单的问题
char str1[] = "abcdeft"; const char *str2 = "1111"; strcat(str1, str2); printf("%s", str1); 这样写合法吗? 我在想,str1是一个数组,那么它初始分配的内存肯定是固定的,但是当调用strcat后,在他末尾又添加了一些东西。 假如在内存分配时,str1后面的内存被分配了,那么我调用了strcat,肯定会把这里内存的内容改写了,那程序肯定会出问题啊?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
5 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
善良超锅锅
2012-06-27
打赏
举报
回复
所以说strcat是不安全的 可以用strcat_s代替
strcat和strcat_s的区别看这里
http://baike.baidu.com/view/4673101.htm
Freeze_Z
2012-06-27
打赏
举报
回复
strcat不进行str1的长度检查.因此需自行保证str1的长度足够.
而你的程序中的写法char str1[] = "abcdeft"; str1正好没有多余长度. str1会被"abcdeft"填满.
导致的问题是会写导致不属于str1的空间被非法覆盖.
善良超锅锅
2012-06-27
打赏
举报
回复
一般你想把str2连接到str1的后面,你必须确保str1数组有足够大的空间。
且str1 和str2的内存区域不能重叠 重叠行为未定义
善良超锅锅
2012-06-27
打赏
举报
回复
这样肯定不合法的 。
char str1[] = "abcdeft",str1数组的大小已经确定了,只能容纳"abcdeft",你再把str2的内容添加到后面是会发生内存访问错误的。
我按照你的代码跑了一遍 编译没问题,运行错误,最后也打印出了abcdeft1111
但是运行时出现内存访问异常
ouyh12345
2012-06-27
打赏
举报
回复
不行,会越界
一个
简单
的 C 语言指针
问题
上次网友问到
一个
问题
,就是
简单
的C的指针的
问题
:
一个
数组:int a[3] = { 1, 2, 3 }; 他说为什么:printf( "%d", a ); printf( "%d",&a ); 的值是一样的,其实这是很
简单
的C指针
问题
,但是也是初学者易错的地方! 首先我们必须明白数组的实质意义:其实最终产生指令代码之前还是需要化
简单
的c语言程序
问题
,C语言程序
一个
问题
其实很
简单
该楼层疑似违规已被系统折叠隐藏此楼查看此楼c语言程序
一个
问题
请高手回答其实很
简单
这是
一个
要求输入
一个
不多于5位的正整数,要求:1求它是几位数;2分别输出每一位数字;3按逆序输出各位数字。例如原数为321,应输出123...(indiv代表个位的意思)程序如下:#includevoidmain(){longintnum;intindiv,ten,hundred,thousa...
一个
简单
C程序的
问题
以下的C程序或者是初学者比较容易出现的
问题
: #include void main() { char str[3]={'1','2','3'}; printf("%c",*str++); } 初看起来没太大
问题
,但是运行结果会提示“++”需要左值。什么意思呢?也就是参数P不是“++”的左值,为什么呢? 原因是str是
一个
数组指针,指向str[3]第
一个
元素的位置,也就是说,它是
一个
一个
简单
的C语言嵌套
问题
外面的FOR运行一步 到最里面个了For运行2步|||这个程序很
简单
我先给你从第一行分析:m n k 这个你在程序中要求输出的(printf("m n k/n");)第二行是 0 0 0 是因为m N:0 K:00 0 1 M:0 N:0 k)}};|||m n k 0 0 0 M:0 n m 2printf("%d %d %d/n" k n=1 2/m=0 先
C语言
一个
简单
问题
|||scanf输入之后半径和高才有值..第二个程序赋值之前就开始计算了..变量没有初值默认为零..|||
一个
是先输入后计算 l h赋值 你不先给r 结果输出全不为0.00 所以结果不同|||因为第二个程序中 r和h是没有初值的 赋值语句之前 r和h在赋值语句之前已经有值了;而第二个程序中 所以运算是错误的3.程序执行过程一般程序都是顺序执行的in
C语言
70,039
社区成员
243,246
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章