读取不定长字符串的输入

读取不定长字符串的输入【C语言】

在C语言中,我们可以使用字符数组来输入定长字符串。比如:

#include <stdio.h>
#include <stdlib.h>
#define LEN 100
 
int main() {
  char str[LEN];
  int i = 0;
  printf("请输入字符串:");
  while (i < LEN - 1) {
    str[i] = getchar();
    if (str[i] == '\n') { // 如果遇到换行符,则表示字符串输入结束
      break;
    }
    i++;
  }
  str[i] = '\0'; // 在字符串末尾添加'\0',表示字符串结束
  printf("输入的字符串为: %s\n", str);
  system("pause");//防止终端一闪而过无法查看结果
  return 0;
}

上述代码中,我们使用了一个字符数组 str 来存储用户输入的字符串,数组大小为 LEN。然后我们使用 getchar() 函数逐个读取字符,并将其存储到数组中,直到读取到换行符为止。在读取过程中,我们还需要检查字符数是否超过了数组的长度,以防止内存溢出。最后,我们在字符串的末尾添加一个空字符(\0),这样才能够正确地处理字符串。

我们也可以使用字符指针来读取不定长字符串输入,可以使用动态内存分配来实现。
以下是一个使用 malloc() 函数和realloc()函数进行动态内存分配读取不定长字符串输入的示例代码:

#include <stdio.h>
#include <stdlib.h>
 
int main() {
    char *str;//定义一个字符指针
    char *InputUnknownLengthString(char *str);
    str=InputUnknownLengthString(str);
    
    printf("输入的字符串为:%s\n", str);//检查是否成功输入了 
    system("pause");
  return 0;
}
char *InputUnknownLengthString(char *str){
    int size = 1;//大小
    int len = 0;//字符串长度
    char ch;
 
    str = (char*) malloc(size); // 分配初始内存
    printf("请输入字符串:");
 
    while ((ch = getchar()) != '\n') { // 逐个读取字符,直到读取换行符为止
        if (len >= size) { // 如果当前字符串长度超过了已分配内存的大小,则重新分配更多的内存
            size *= 2;
            str = (char*) realloc(str, size);//对已开辟的区域重新分配
        }
        *(str + len) = ch; // 将读取的字符存储到字符串中
        len++;
    }
 
    *(str + len) = '\0'; // 在字符串末尾添加 '\0',表示字符串结束
    return str;
    free(str); // 如果不再需要这块内存,必须释放它
}

上述代码中,用InputUnknownLengthString()函数来实现不定长字符串的输入。开始时分配了一个大小为 1 的内存块,然后逐个读取字符并将其存储在字符串中。如果字符串长度超过了当前已分配的内存大小,使用 realloc() 函数重新分配更大的内存块,并将原来的数据复制到新的内存块中。最后,也要在字符串末尾添加一个空字符(\0),这样才能够正确地处理字符串。
可以多输入几次来检查是否能正常实现功能。

使用动态内存分配需要谨慎考虑,必须在不再需要内存时释放它,以避免内存泄露。另外,在分配和重新分配内存时,还需要检查分配是否成功,以避免分配失败导致程序崩溃的情况。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值