首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

高手入,一个奇怪的字符串修改有关问题

2012-03-05 
高手入,一个奇怪的字符串修改问题代码如下:#includeiostream.h#includestring.h#includestdio.h#inc

高手入,一个奇怪的字符串修改问题
代码如下:
#include   <iostream.h>
#include   <string.h>
#include   <stdio.h>
#include   <stdlib.h>
char*   str1   =   "ABDFLjlero我们都是saF ";

char*   ToLower(char   s[])
{
      size_t   i=strlen(s);

for   (i;   i> =0;   i--)   {
if   (*(s+i) <= 'Z '&&*(s+i)> = 'A ')   {
*(s+i)+=   'a '- 'A ';//访问非法
}
}
return   s;
}
int   main()
{
printf( "old   str[%s]   after   lower ",   str1   );
printf( "[%s]\n ",ToLower(str1));
return   0;
}
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
将字符串str1转成小写,并打印出转化前后的字符串。但程序运行到注释处访问非法,是什么原因?
另外不能改变函数的接口和主要思路,要如何修改?


[解决办法]
char* str1 = "ABDFLjlero我们都是saF ";

str1指向的是常量字符串,当然也是不能修改的

char str[]=...
[解决办法]
这样就可以了
#include <iostream>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
using namespace std;
#define MAXLEN 256
char* ToLower(char s[])
{
int i=strlen(s);

cout < <i < <endl;

for (i; i> =0; i--) {
if (*(s+i) <= 'Z '&&*(s+i)> = 'A ') {
cout < <*(s+i) < <endl;
*(s+i)+= 'a '- 'A ';//访问非法
}
}
return s;
}
int main()
{
char str1[MAXLEN] = "ABD我们F ";

printf( "old str[%s] after lower ", str1 );
printf( "[%s]\n ",ToLower(str1));
return 0;
}

热点排行