网页
资讯
视频
图片
知道
文库
贴吧
地图
采购
进入贴吧
全吧搜索
吧内搜索
搜贴
搜人
进吧
搜标签
日
一
二
三
四
五
六
签到排名:今日本吧第
个签到,
本吧因你更精彩,明天继续来努力!
本吧签到人数:0
一键签到
成为超级会员,使用一键签到
一键签到
本月漏签
0
次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行
补签
。
连续签到:
天 累计签到:
天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
03月27日
漏签
0
天
c语言吧
关注:
798,995
贴子:
4,352,524
看贴
图片
吧主推荐
视频
游戏
5
回复贴,共
1
页
<<返回c语言吧
>0< 加载中...
请求大佬帮助
只看楼主
收藏
回复
神奈心
路人
2
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
用memset函数对未定义长度的字符串使用时会修改上一个字符串。如何避免?
我正在写一个输出字符串时自动居中对齐的函数,思路是取一个足够大的y,读取字符串长度x,再定义一个字符串来输出(y-x)/2个空格来实现。可是再用memset函数时会把第一个覆盖一部分,猜测因为字符串长度还未定义,内存地址连起来读取到了上一个字符串导致的。
神奈心
路人
2
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
如果能根据变量直接定义长度就好了,但把变量放到char括号里会报错
Lason•᷄ࡇ•᷅
彩虹面包
13
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
为什么要用memset?循环输出填充字符,或者如果只需要输出空格的话,去了解一下%*s,显然是更好的做法。
另外看起来像是在用gnu工具链的样子,gcc实际是支持vla的。
香菜味包子
超能力者
9
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
你的spacename,和spaceAdd这几个长度都是1,你用memset的时候就已经导致数组越界了。
至于为什么会覆盖上一个数组的值,因为spaceAdd的地址在spaceName的地址前面正好一个字节
需要size长度的数组可以使用char *str = malloc(sizeof(char) * size);
但是更合理的办法参考上面的回答
登录百度账号
扫二维码下载贴吧客户端
下载贴吧APP
看高清直播、视频!
贴吧页面意见反馈
违规贴吧举报反馈通道
贴吧违规信息处理公示