读书人

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

发布时间: 2012-03-05 11:54:01 作者: rapoo

高手入,一个奇怪的字符串修改问题
代码如下:
#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;
}

读书人网 >C++

热点推荐