在C语言中,怎么样由键盘输出一个不限定长度的字符串?

如题所述

#include <stdlib.h>
#include <stdio.h>
#define STRLEN 20

void main()
{
char *arr = (char *)malloc(sizeof(char) * STRLEN); // 保存字符串,初始长度设定为STRLEN
char input; // 保存一个从输入流传入的字符
int strSize = STRLEN; // 计算arr字符串能存储的最大长度
int strLength = 0; // 存储arr已经存储的字符串长度

while ((input = getc(stdin)) != '\n') // 从输入流读取一个字符,如果这个字符不是\n
{
arr[strLength] = input; // 将这个字符放入arr
++strLength; // arr已存储长度加1
if (strLength == strSize) // 如果字符串长度已经超过了arr的最大能存储长度
{
arr = (char *)realloc(arr, strSize + STRLEN); // 在原来arr的大小上,重新申请一个多STRLEN长度的空间
strSize += STRLEN; // 将arr能存储的最大长度更新
}
}
arr[strLength] = '\0'; // 在字符串末尾加'\0'以示结束
return;
}

你是否想要一个这样功能,满意请采纳。这个函数可以动态生成字符串大小。你输入的越多,字符串越大,每次递增的大小为STRLEN的大小追问

我还是个初学者,这个我看不太懂!
可以用 getchar () 输入吗?
我想输入一句话,比如说 “I am a boy !”但是事先我不定义这句话的长度,由键盘输入,然后输出或研究这句话中的字符?

追答

#include
#include
#define STRLEN 20

void main()
{
char *arr = (char *)malloc(sizeof(char) * STRLEN); // 保存字符串,初始长度设定为STRLEN
char input; // 保存一个从输入流传入的字符
int strSize = STRLEN; // 计算arr字符串能存储的最大长度
int strLength = 0; // 存储arr已经存储的字符串长度

while ((input = getchar()) != '\n') // 从输入流读取一个字符,如果这个字符不是\n
{
arr[strLength] = input; // 将这个字符放入arr
++strLength; // arr已存储长度加1
if (strLength == strSize) // 如果字符串长度已经超过了arr的最大能存储长度
{
arr = (char *)realloc(arr, strSize + STRLEN); // 在原来arr的大小上,重新申请一个多STRLEN长度的空间
strSize += STRLEN; // 将arr能存储的最大长度更新
}
}
arr[strLength] = '\0'; // 在字符串末尾加'\0'以示结束
return;
}
我帮你把代码改好了。就是换行语句就行

我这个代码是调用了动态申请,如果你只是随便输入一句话,
那我建议你,直接定一个char arr[100]就得了。往大了定义
#include
void main()
{

char arr[100]; // 保存字符串,长度设定为100
char input; // 保存一个从输入流传入的字符
int strLength = 0;

getline();
while ((input = getchar()) != '\n') // 从输入流读取一个字符,如果这个字符不是\n
{
arr[strLength] = input; // 将这个字符放入arr
++strLength; // arr已存储长度加1
}
arr[strLength] = '\0'; // 在字符串末尾加'\0'以示结束
return;
}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2015-12-23
#include <stdlib.h>
#include <stdio.h>
#define STRLEN 20
void main()
{
char *arr = (char *)malloc(sizeof(char) * STRLEN); // 保存字符串,初始长度设定为STRLEN char input; // 保存一个从输入流传入的字符
int strSize = STRLEN; // 计算arr字符串能存储的最大长度
int strLength = 0; // 存储arr已经存储的字符串长度
while ((input = getc(stdin)) != '\n') // 从输入流读取一个字符,如果这个字符不是\n
{
arr[strLength] = input; // 将这个字符放入arr
++strLength; // arr已存储长度加1
if (strLength == strSize) // 如果字符串长度已经超过了arr的最大能存储长度
{
arr = (char *)realloc(arr, strSize + STRLEN); // 在原来arr的大小上,重新申请一个多STRLEN长度的空间
strSize += STRLEN; // 将arr能存储的最大长度更新
}
}
arr[strLength] = '\0'; // 在字符串末尾加'\0'以示结束 return;}你是否想要一个这样功能,满意请采纳。这个函数可以动态生成字符串大小。你输入的越多,字符串越大,每次递增的大小为STRLEN的大小本回答被网友采纳
第2个回答  2015-12-14
使用getchar()函数就可以了。通过一个while循环。
#include"stdio.h"
int main(void)
{
char ch;
while((ch=getchar())!='#')
{
}
}
这样就可以了,不明白可以继续追问朋友,互相帮助
第3个回答  2012-06-13
用指针就可以了
#include"stdio.h"
void main()
{
char *p;
printf("Input:\n");
gets(p);/*可输任意长度*/
printf("Output:\n");
puts(p);
getch();
}
Win-Tc下运行啊。
运行结果:
Input:
I am a boy
Output:
I am a boy
相似回答