小写转大写程序,显示段错误

发布于 2022-10-15 07:56:40 字数 1266 浏览 22 评论 0

#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技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(9

吃不饱 2022-10-22 07:56:40

输入的字符串太长了

清风无影 2022-10-22 07:56:40

us=s=ss;

相对绾红妆 2022-10-22 07:56:40

US那个指针没有指向正确的位置,所以才会段错误。

我三岁 2022-10-22 07:56:40

回复 1# dagobert1989

緩沖區溢出錯誤的經典的例子啊...借用一下您的程式碼, 給徒弟們講解如何? 先在此謝過啦, 哈哈

半﹌身腐败 2022-10-22 07:56:40

回复 5# Cindinx
大侠,那应该怎么改啊?
可不可以给个思路啊?

自在安然 2022-10-22 07:56:40

回复  Cindinx
大侠,那应该怎么改啊?
可不可以给个思路啊?
dagobert1989 发表于 2011-05-05 09:06

    在栈里面分配缓冲区没错,但是往缓冲区里写的时候要控制长度

遇见了你 2022-10-22 07:56:40

转换成大写,好像只要

char c;
c & 0xDF;
就可以了吧?

赤濁 2022-10-22 07:56:40

转换成大写,好像只要

char c;
c & 0xDF;
就可以了吧?
雨夜流星 发表于 2011-05-05 09:26

    他的問題不是轉換的事情, 而是發生了緩沖區溢出錯誤

牵你手 2022-10-22 07:56:40

回复 5# Cindinx

    溢出个毛!us指针根本就没有分配内存,它指向的是内存中的随机位置,在upper函数中又向该内存区域写入数据才导致“段错误”的

char *s,*us; // us这样只是定义一个指针而已

char us[20]; // 应该这样定义,或者分配一块内存
char ss[20];

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文