当前位置:首页 » 编程语言 » c语言字符数据长度不确定
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

c语言字符数据长度不确定

发布时间: 2022-08-10 15:16:43

c语言里面要定义一个字符串数组,数组元素个数不确定,每个元素的长度也不确定,求动态定义的方法

你可以用动态分配内存的方法,
比如你要建立一个字符串数组:
char *str;
str=(char *)malloc(n);
n是变量,可以在确定了变量的值后再用以上代码分配内存,
而str字符串可以以一般数组的用法使用,比如
*str="hello";的话
str[1]='l';

最后别忘了释放内存
free(str);

② 在c语言中如何输入长度不确定的字符串

你可以这样做:

//文件名: array01.cpp
#include<iostream>
using namespace std;

int main()
{
int len;
cin>>len;
//用指针p指向new动态分配的长度为len*sizeof(int)的内存空间
int *p=new int[len];
...........
delete[] p;
return 0;
}

注意int *p=new int[len];这一句,你不能这样做:
int p[len];
C++编译器会报错说len的大小不能确定,因为用这种形式声明数组,数组的大小需要在编译时确定。而且这样也不行:
int p[]=new int[len];
编译器会说不能把int*型转化为int[]型,因为用new开辟了一段内存空间后会返回这段内存的首地址,所以要把这个地址赋给一个指针,所以要用int *p=new int[len];

array01.cpp实现了一个变长的一维数组,但是要养成一个好习惯,就是注意要注销指针p,使程序释放用new开辟的内存空间。

不过,如果你能够知道字符串的最大长度的话,最简单的办法就是直接将数组定义为最大长度。

③ C语言怎么获取用户输入的不定长字符串

办法很多,举一二三:

  1. 虽说“不定长”,但长度要求不是很大时,可声明一个足够大的字符型数组来解决。缺点是空间略有浪费。

  2. 声明两个字符型指针,先为其一动态分配内存,当输入满时为另一个分配更大些的内存,把已经输入的内容拷贝过去,释放原来较小的空间;交换指针,继续输入,如此不断。缺点是瞬间需将近两倍实际需要的空间。

  3. 用链表,这比较正宗,但需要5位以上的空间。

第2在实际工作中使用过,一个字:爽!

④ c语言中怎样判断字符串的长度问题啊

本题的输出结果是9 我给你总结这样的题型。1首先你要知道转义字符,如\n \t \\ \ddd 等这些属于转义字符,只占一个字符串的长度。2.还有就是\101代表ASCII码的为101的字符'A',记住\376 以内的都占一个字符串长度,他们都代表ASCII中的某个字母,数字,或乱码。 希望你看对以后这样的题都做满分

⑤ C语言中关于字符数组的长度问题

哎。strlen()是在string.h里面的,getch()是在conio.h里面的,不过,我用的是CFree,至于其它的编译器,我就不知道了。
至于你的问题,当你仔细看看他们的结果,你就会有结论了。
很明显,strlen(q)的值是一样的,不同的是p的字符长度
而它们的区别,就在于,它们一个有数组的长度,另一个没有。
数组q,它的长度是10,所以一开始就会分配10个大小为sizeof(char)的空间,然后,就把a,b,c分别放进从分配的第一个,第二个,第三个空间里面,然后,剩下的变为0()也就是'\0'。
所以用strlen(q)的时候,就是3
而没有长度的p,它缺省了长度,所以系统就会按你给的元素个数分配,这里p有3个元素,所以就分配3个大小为sizeof(char)的空间,当你用strlen(p)的时候,因为strlen()是以字符串终结符'\0'来判定字符串长度的,所以呢,strlen(p)是一个不确定值。
如果你还没能理解为什么是一个不确定值,那就继续看下去。
在C中,是不会检测是否越界的,你可以顺着数组一直访问下去,比如你定义一个 int a[10]
你可以访问a[12],a[13](当然也可以访问a[-1],a[-100]),只是这些值是不确定的。它访问的方式,是从数组的起始地址开始,按照数组下标值,进行相对位移(它们所跳过的长度是数组类型的长度,比如上面,是跳过sizeof(int)的长度)。
而strlen()就是从它首地址开始,一个个开始检测,是否达到'\0‘,然后返回长度值。
当你调用strlen()的时候,如果没有终止符'\0’,它就会越界检查,直到找到'\0‘。
就像 char a[3]={'a','b','c'},它也是一个不确定值。
明白了没,不懂继续追问。
写这么多,真的好累。。。

⑥ c语言 如何接受不定长的字符串

不浪费内存有办法:
先动态分配(malloc)一个大数组,读入数据后, 考虑字符串长度,用 realloc 缩小数组。

#include<stdio.h>
#include<stdlib.h>
main(){
char *name;
int n=1000;
int L;
name = (char*) malloc(sizeof(char)*n); // 动态分配,先考虑 1000字节
scanf("%s",name); // 读入字符串
L=strlen(name); // 计算长度
if ((n-L) > 10) { // 若 已动态分配的单元数,超出需要的单元有 10个以上
realloc(name,sizeof(char)*(L+1)); //则保留字符串内容不动,并缩小动态分配的数组
n = L+1; // 现在缩小为 n = 字符串长度加1
}
printf("n=%d %s",n,name); // 输出结果

return 0;
}

⑦ 求解,C语言求字符串的长度,我写的程序为什么不对啊

C语音中的变量需要初始化,如果不初始化,初始值是不确定的。
在你的代码中,长度变量i在使用前没有初始化,导致变量i的值是不确定的,所以对变量进行++c操作,统计总的字符串得到的长度值是不确定的。
正确的做法是:
int i=0, j=0;

⑧ c语言中关于字符串长度的问题

不,若不在[]填数字,就必须在初始化这个str,在等号右边写具体数据,有几个数据,编译器就自动在[]中填几了。所以char str[]{0}这样写是错误的,要写成char str[]={'a','b','c'};这样的形式,编译器就会认为[]中是3了。另,char型数组还可以char str[]="1234567";这样来定义,但这时[]中并不是7而是8,原来编译器把str作为字符串对待了,要在7后自动加一个结束符'\0'。