c 字符串输入-c语言中如何动态输入字符串而不需要事先定义字符数组大小

问题描述

c语言中如何动态输入字符串而不需要事先定义字符数组大小

如标题 c语言中如何动态输入字符串而不需要事先定义字符数组大小或为字符指针分配空间

解决方案

你这个要求实际使用度太低,或者说,完全没有必要非要这样去想。

解决方案二:

c语言中字符串与字符数组
c语言中的字符数组与字符串
C语言 字符数组和字符串

解决方案三:

你这样定义好了char *p;

解决方案四:

#include
#include

#include
#define Step 10 //空间增加的步长.
char * getstr() //任意长度的字符串输入,返回字符串的首地址.
{
char *temp, *str=(char *)malloc(10);
int c=0, len=0, times=1, number=0;
if(!str)
{
printf("内存不够,无法开辟字符串空间!");
return (char *)NULL;
}
number+=times*Step;
while((c=getche())!='/r') //遇到回车则输入结束。
{
if(len==number)
{
times++;
number=times*Step;
temp=str;

str=(char *)realloc(str,number);
if(str==NULL)
{
printf("内存不够,字符串输入受限!");
str=temp;

break;
}
}
*(str+len)=c;
len++;
}

str=(char *)realloc(str,len+1); //字符串的实际长短调整空间.
*(str+len)='/0';
return str;
}
int main()
{
char *str=NULL;
str=getstr(); //字符串输入
printf("/nstr=%s/n",str);
free(str);

return 0;
}
数组再大空间还是一个固定值,不能实现动态增长,事先定义不是太大了浪费内存,就是字符串过长了导致溢出;而链表的增加、查询等操作又太显繁琐,效率不高,所以我没那样写,而这段代码可以实现任意字符串输入了,至于空间倒也没啥浪费。

解决方案五:

使用STL模板吧,,,,,

解决方案六:

学学 string 的实现就可以了

时间: 2024-08-31 23:51:10

c 字符串输入-c语言中如何动态输入字符串而不需要事先定义字符数组大小的相关文章

C语言中交换int型变量的值及转换为字符数组的方法_C 语言

不使用其他变量交换两个整型的值: #include <stdio.h> void main(){ int a = 3; int b = 4; a = a ^ b;//使用异或交换 b = b ^ a; a = a ^ b; printf("%d, %d\n", a, b); a = a - b;//使用加减交换 b = a + b; a = b - a; printf("%d, %d\n", a, b); a ^= b ^= a ^= b; printf

c语言:如何把一个整数按位保存在一个字符数组里,然后再读取出来还原为一个整数

问题描述 c语言:如何把一个整数按位保存在一个字符数组里,然后再读取出来还原为一个整数 void WitedataToFlash(void) { unsigned char i; sprintf(datal, "%luunsignedlong", gdvolt); for(i=0;i<11;i++) EEPROM_write(0x01+i,datal[i]); } /*********************************************************

c语言-C语言里想要用函数创建一个新的字符数组,并使其等于原有的一个字符数组该怎么做?

问题描述 C语言里想要用函数创建一个新的字符数组,并使其等于原有的一个字符数组该怎么做? #include #include #include char map[4][4]; char creat()//创建一个新的字符数组 { char *maze=(char)malloc(sizeof(map)); return maze; } void main() { int i,j; for(i=0;i<4;i++) { gets(map[i]); } char *maze=creat(); strc

在C语言中比较两个字符串是否相等的方法_C 语言

C语言strcmp()函数:比较字符串(区分大小写) 头文件:#include <string.h> strcmp() 用来比较字符串(区分大小写),其原型为: int strcmp(const char *s1, const char *s2); [参数]s1, s2 为需要比较的两个字符串. 字符串大小的比较是以ASCII 码表上的顺序来决定,此顺序亦为字符的值.strcmp()首先将s1 第一个字符值减去s2 第一个字符值,若差值为0 则再继续比较下个字符,若差值不为0 则将差值返回.例

C语言中的内联函数(inline)与宏定义(#define)详细解析_C 语言

先简明扼要,说下关键:1.内联函数在可读性方面与函数是相同的,而在编译时是将函数直接嵌入调用程序的主体,省去了调用/返回指令,这样在运行时速度更快. 2.内联函数可以调试,而宏定义是不可以调试的.内联函数与宏本质上是两个不同的概念如果程序编写者对于既要求快速,又要求可读的情况下,则应该将函数冠以inline.下面详细介绍一下探讨一下内联函数与宏定义. 一.内联函数是什么?内联函数是代码被插入到调用者代码处的函数.如同 #define 宏(但并不等同,原因见下文),内联函数通过避免被调用的开销来提

详解C++编程中的文件流与字符串流_C 语言

C++文件流类与文件流对象 文件流是以外存文件为输入输出对象的数据流.输出文件流是从内存流向外存文件的数据,输入文件流是从外存文件流向内存的数据.每一个文件流都有一个内存缓冲区与之对应. 请区分文件流与文件的概念,不用误以为文件流是由若干个文件组成的流.文件流本身不是文件,而只是以文件为输入输出对象的流.若要对磁盘文件输入输出,就必须通过文件流来实现. 在C++的I/O类库中定义了几种文件类,专门用于对磁盘文件的输入输出操作. 除了标准输入输出流类istream.ostream和iostream

深入解析C++中的字符数组和处理字符串的方法_C 语言

C++字符数组 用来存放字符数据的数组是字符数组,字符数组中的一个元素存放一个字符.字符数组具有数组的共同属性.由于字符串应用广泛,C和C++专门为它提供了许多方便的用法和函数. 字符数组的定义和初始化 定义字符数组的方法与前面介绍的类似.例如: char c[10]; c[0]=′I′;c[1]=′ ′;c[2]=′a′;c[3]=′m′;c[4]=′ ′;c[5]=′h′;c[6]=′a′;c[7]=′p′;c[8]=′p′;c[9]=′y′; 上面定义了c为字符数组,包含10个元素.在赋值

字符串截取-c语言截取字符串问题!!!!

问题描述 c语言截取字符串问题!!!! 求助如何字符串中的'<' '>' ''去掉只留下数字存入int类型的数组中?谢谢!!! 解决方案 c语言字符串问题c语言中的字符串问题C语言中通过分隔符来截取字符串 解决方案二: 判断当是哪些符号的下一个是数字的开始,读到某个特殊字符时结束此数字 解决方案三: #include ""stdafx.h""#include <iostream>using namespace std;int main(){

login-C# 怎么动态替换字符串

问题描述 C# 怎么动态替换字符串 原始文件 cna=kIL9DoazbDcCAWVVUDnmV4lC; mobileSendTime=-1; credibleMobileSendTime=-1; ctuMobileSendTime=-1; riskMobileBankSendTime=-1; riskMobileAccoutSendTime=-1; riskMobileCreditSendTime=-1; riskCredibleMobileSendTime=-1; riskOriginalA