c语言输出指定个数的字符,读取指定个数的字符,依照要求输出。当指定数目≥32时,出错...

读取指定个数的字符,按照要求输出。当指定数目≥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的大小在程序启动的时候就已经定死了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值