char溢出问题怎么解决

top啦它 2019-12-05 01:20:17
请问应该怎么改,下面代码还能用吗? #include<stdio.h> #include<math.h> #include<string.h> #include<stdlib.h> #define N 100000 int main(void) { int i,n,t,a,b; unsigned char d[N]; gets(d); t = strlen(d); char *u;u = d; for(i = 0;i < t;i++) { if(*(u + i) >= '0'&&*(u + i) <= '9') { *(u + i) = (*(u + i) + 49); } } scanf("%d",&b); for(i = 0;i < t;i++) { *(u + i) = *(u + i) + b; *(u + i) = fabs(*(u+i)); if(*(u + i) > 'z'&&*(u + i) <= 147) { *(u + i) = *(u + i) - 26; } } for(a = 0;a < t;a++) { printf("%c",*(u + a)); } return 0; } Description Fresher学了C语言以后,发现自己的逻辑思维能力得到了很大的提高整个人都变得深沉了。他看到一行包含英文小写字母和数字的字符串,想着把字符串按照一定的规律进行变换,Fresher制定了如下规则:(1)将字符串中的数字加密为对应序号的英文字母,如数字0加密为字母a,数字1加密为字母b,以此类推;(2)第一次加密后的字符串进行二次加密,将字符串中每个字母c加一个序数k(k<26),变换公式:c=c+k。如果字母为z,则后一个字母是a。 Input 一个字符串和一个正整数 Output 一个加密后的字符串 Sample Input ab0a 1 Sample Output bcbb
...全文
211 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
top啦它 2019-12-05
  • 打赏
  • 举报
回复
好的,谢谢
寻开心 2019-12-05
  • 打赏
  • 举报
回复
后面的第二部操作也不对,改成这样

scanf("%d",&b);
for(i = 0;i < t;i++)
{
*(u + i) = *(u + i) + b;
if(*(u + i) > 'z')
{
*(u + i) = *(u + i) - ('z'-'a');
}
}
top啦它 2019-12-05
  • 打赏
  • 举报
回复
引用 1 楼 寻开心的回复:
#define N 100000
int main(void)
{
int i,n,t,a,b;
unsigned char d[N]; // 这样一行移动到int main上面去, 并且 把unsigned 去掉。函数体内数组不能太大
gets(d);
t = strlen(d);

*(u + i) = (*(u + i) + 49); // 这个也不对,不是加49, 而是加 'a'-'0' 才对
嗯,谢谢
寻开心 2019-12-05
  • 打赏
  • 举报
回复
#define N 100000
int main(void)
{
int i,n,t,a,b;
unsigned char d[N]; // 这样一行移动到int main上面去, 并且 把unsigned 去掉。函数体内数组不能太大
gets(d);
t = strlen(d);

*(u + i) = (*(u + i) + 49); // 这个也不对,不是加49, 而是加 'a'-'0' 才对
千梦一生 2019-12-05
  • 打赏
  • 举报
回复
整个人都变得深沉了

69,375

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧