读取指定个数的字符,按照要求输出。当指定数目≥32时,出错。
代码如下:
/***********************************************************************
*读取输入直到文件结尾,按照用户指定输出
*-p:原样输出;-u:转为大写;-l转为小写
*
#include
#include
void getInput(char *string, int number);
void toUpper(char *string);
void toLower(char *string);
void showString(const char *string);
int main(int argc, char *argv[])
{
int number;
char string[number];
if(argc > 1){
printf("Please enter the maximum number you want input: ");
scanf("%d", &number);
while('\n' != getchar())
;
getInput(string, number);
switch(argv[1][1]){
case 'p': printf("You choose SHOW IT SELF: \n");
showString(string);
break;
case 'u': printf("You choose TOUPPER: \n");
toUpper(string);
showString(string);
break;
case 'l': printf("You choose TOLOWER: \n");
toLower(string);
showString(string);
break;
default : printf("WRONG!\n");
}
} else
printf("Please enter \"-p\" or \"-l\" or \"-u\" atfer the "
"program name!\nDone!\n");
return 0;
}
void getInput(char *string, int number)
{
int index;
printf("Please enter no more than %d characters:\n", number);
for(index=0; index
string[index] = getchar();
string[index] = '\0';
}
void toUpper(char *string)
{
while(*string){
*string = toupper(*string);
string++;
}
}
void toLower(char *string)
{
while(*string){
*string = tolower(*string);
string++;
}
}
void showString(const char *string)
{
while(*string)
putchar(*string++);
}
上述代码的执行结果:
引用$ ./string.exe -u
Please enter the maximum number you want input: 31
Please enter no more than 31 characters:
women doushi haohaizi, tianzhenlanman de haizi.
You choose TOUPPER:
WOMEN DOUSHI HAOHAIZI, TIANZHEN
$ ./string.exe -u
Please enter the maximum number you want input: 33
Please enter no more than 33 characters:
women doushi haohaizi, tianzhenlanman de haizi.
You choose TOUPPER:
$ ./string.exe -u
Please enter the maximum number you want input: 50
Please enter no more than 50 characters:
women doushi haohaizi, tianzhenlanman de haizi.
You choose TOUPPER:
Segmentation fault (核心已转储)
------解决思路----------------------
/***********************************************************************
*读取输入直到文件结尾,按照用户指定输出
*-p:原样输出;-u:转为大写;-l转为小写
*
*/
#include
#include
void getInput(char *string, int number);
void toUpper(char *string);
void toLower(char *string);
void showString(const char *string);
int main(int argc, char *argv[])
{
int number;
char *string;
if(argc > 1){
while (1)
printf("Please enter the maximum number you want input(1..10000000): ");
fflush(stdout);
rewind(stdin);
number=0;
scanf("%d", &number);
if (1<=number && number<=10000000) break;
}
string=new char[number];
if (NULL==string) return 1;
while('\n' != getchar())
;
getInput(string, number);
switch(argv[1][1]){
case 'p': printf("You choose SHOW IT SELF: \n");
showString(string);
break;
case 'u': printf("You choose TOUPPER: \n");
toUpper(string);
showString(string);
break;
case 'l': printf("You choose TOLOWER: \n");
toLower(string);
showString(string);
break;
default : printf("WRONG!\n");
}
delete[] string;
} else
printf("Please enter \"-p\" or \"-l\" or \"-u\" atfer the "
"program name!\nDone!\n");
return 0;
}
void getInput(char *string, int number)
{
int index;
printf("Please enter no more than %d characters:\n", number);
for(index=0; index
string[index] = getchar();
string[index] = '\0';
}
void toUpper(char *string)
{
while(*string){
*string = toupper(*string);
string++;
}
}
void toLower(char *string)
{
while(*string){
*string = tolower(*string);
string++;
}
}
void showString(const char *string)
{
while(*string)
putchar(*string++);
}
------解决思路----------------------
int number;
if(argc > 1){
printf("Please enter the maximum number you want input: ");
scanf("%d", &number);
char *string = new char[number];
...
...
delete[] string;
------解决思路----------------------
数组大小不能动态变化。
------解决思路----------------------
1楼把你的问题指出来了, 你的 char strings[number] 要动态分配。。你不管传多少,你的字符数组strings的大小在程序启动的时候就已经定死了。