标题:请教字符串赋值段错误问题
只看楼主
晓云林
Rank: 2
等 级:论坛游民
帖 子:46
专家分:35
注 册:2011-8-29
结帖率:100%
已结贴  问题点数:5 回复次数:13 
请教字符串赋值段错误问题
代码如下:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void tolowercase(char* str1)
{
    while(*str1 && *str1!='\0')
    {
        *str1 = tolower(*str1++);
    }
    *str1 = '\0';
}

int main(int argc, char *argv[])
{
    char *a = "D";
    tolowercase(a);
    return 0;
}

调试报错:
Program received signal SIGSEGV, Segmentation fault.
0x080484e7 in tolowercase (str1=0x80485f1 "") at sendre.c:30
30            *str1 = tolower(*str1++);
请问问题是什么。谢谢~~



搜索更多相关主题的帖子: received include return 字符串 
2011-08-29 11:35
hahayezhe
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:湖南张家界
等 级:贵宾
威 望:24
帖 子:1386
专家分:6999
注 册:2010-3-8
得分:0 
*str1 = tolower(*str1++);
*str1 = tolower((*str1)++); 、、*str1 = tolower(*(str1++)); ??

void tolowercase(char* str1,size越界检查



2011-08-29 11:42
lz1091914999
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:四川
等 级:贵宾
威 望:37
帖 子:2011
专家分:5959
注 册:2010-11-1
得分:4 
"D"字符串是静态常量,请用char a[] = "D";

My life is brilliant
2011-08-29 11:42
hahayezhe
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:湖南张家界
等 级:贵宾
威 望:24
帖 子:1386
专家分:6999
注 册:2010-3-8
得分:0 
囧 ......他搞个常量
2011-08-29 11:46
晓云林
Rank: 2
等 级:论坛游民
帖 子:46
专家分:35
注 册:2011-8-29
得分:0 
回复 3楼 lz1091914999
谢谢,试了一下char a[] = "D";  还是报错~~
2011-08-29 12:04
naruto01
Rank: 4
等 级:业余侠客
帖 子:103
专家分:280
注 册:2011-5-23
得分:0 
- -#  
   *str1 = '\0'; 去掉。。
小白路过 以上言论 概不负责
2011-08-29 12:07
naruto01
Rank: 4
等 级:业余侠客
帖 子:103
专家分:280
注 册:2011-5-23
得分:0 
额。补充是在3L基础上改。
2011-08-29 12:08
晓云林
Rank: 2
等 级:论坛游民
帖 子:46
专家分:35
注 册:2011-8-29
得分:0 
回复 2楼 hahayezhe
是 *str1 = tolower((*str1)++); 我本来是想用 tolowercase(argv[1]); 一调试就出现了段错误,然后换了char *a="D";试一下的。我是初学者,正在探索阶段,所以很多用法不是很正确,还请指教。
2011-08-29 12:10
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
得分:0 
初学者就不要学这样的代码,真是不坏不学。
*str1 = tolower((*str1)++);

i=i++
你自己给解释一下这个语句怎么运作?

授人以渔,不授人以鱼。
2011-08-29 12:14
Luminal
Rank: 6Rank: 6
等 级:侠之大者
帖 子:140
专家分:470
注 册:2011-8-24
得分:0 
void tolowercase(char* str1)
{
    while(*str1 )
    {
        *str1 = tolower(*str1);
        str1++;
        
    }
  
}
改成这样吧!一了百了!
至于你原来程序的问题,大家也解释不少了,建议认真去看!
啰嗦一句,先学走再学跑,不然会摔跤的!
也许会摔得很惨!
2011-08-29 12:35



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-348607-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 1.177536 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved