小写转大写程序,显示段错误
#include <stdio.h>
void uppers(char *s,char *us)
{
for(;*s!='\0';s++,us++)
{
if(*s>='a'&&*s<='z')
*us=*s-32;
else
*us=*s;
}
}
int main()
{
char *s,*us;
char ss[20];
printf("Please input a string:\n");
scanf("%s",ss);
s=ss;
uppers(s,us);
printf("The result is:\n%s\n",us);
}
输入字符按理来说应该显示的是大写字母;
但我输入一段小写字母后,它显示的是:段错误.
这是为什么啊?
请高手指教!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
![扫码二维码加入Web技术交流群](/public/img/jiaqun_03.jpg)
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(9)
输入的字符串太长了
us=s=ss;
US那个指针没有指向正确的位置,所以才会段错误。
回复 1# dagobert1989
緩沖區溢出錯誤的經典的例子啊...借用一下您的程式碼, 給徒弟們講解如何? 先在此謝過啦, 哈哈
回复 5# Cindinx
大侠,那应该怎么改啊?
可不可以给个思路啊?
在栈里面分配缓冲区没错,但是往缓冲区里写的时候要控制长度
转换成大写,好像只要
char c;
c & 0xDF;
就可以了吧?
他的問題不是轉換的事情, 而是發生了緩沖區溢出錯誤
回复 5# Cindinx
溢出个毛!us指针根本就没有分配内存,它指向的是内存中的随机位置,在upper函数中又向该内存区域写入数据才导致“段错误”的
char *s,*us; // us这样只是定义一个指针而已
char us[20]; // 应该这样定义,或者分配一块内存
char ss[20];