C中的任意长度字符串

麦可

我需要对字符串进行一些操作(例如在某些位置添加字母)。我不知道它的大小,取决于输入。

如何在不指定大小的情况下定义字符串?我希望它适应我放入的所有内容。

为什么我不能只将一个空值char *传递给方法呢?编译器不允许这样做。

根据答案,我知道我无法创建大小不受限制的字符串。但是例如,当我尝试创建char arr[100]并且我的字符串的长度只有8个字符时,我打印时arr得到的字母比我想要的更多。其中一些甚至都不是字符串的一部分。那怎么可能?

手指

简短答案

您不能定义大小未知的字符串。但是您可以在需要时使字符串越来越大。所有的字符串和I / O函数都需要获取一个已分配的字符串才能使用,因此您必须花一点时间进行分配,并注意不要超过分配的容量。

但是,当您在字符串长度上具有恒定的上限时,只需分配该长度的字符串就可以了。调整大小更为复杂,因此在不需要时避免调整大小。

什么是C中的字符串

字符串是char数组的一部分,以终止\0字符串函数遇到第一个\0字符时将停止读取数组请记住,它strlen返回第一个字符之前字符数\0,因此,即使数组在第一个\0字符之后立即结束,字符串长度也严格小于基础数组长度。特别是在这种情况下,数组长度为strlen + 1这在分配字符串时很重要。总是为终端分配空间\0

例如

char w[7] = "Hello";

是相同的

char w[7] = {'H', 'e', 'l', 'l', 'o', '\0', '\0'};

当用作字符串时,第一个\0是字符串的结尾,其后的所有字符都将被忽略(不被字符串函数读取)。即使您通过可打印字符(例如,w[6] = '!';导致具有{'H', 'e', 'l', 'l', 'o', '\0', '!'}重写了示例char数组的最后一个元素puts(w);也将进行打印Hello(不是Hello!或类似的结果)。

当像使用char数组一样使用字符串进行播放时,请确保始终\0在其末尾包含,否则在由字符串函数读取该数组之后可能会导致segfault的情况下可能未分配的内存

为什么无法定义未知大小的字符串

正如我已经写过的,字符串是char数组的一部分。每个数组必须具有固定的大小。您可以仅使用它的一部分(有效地使其更小),但是必须对其进行分配,并且分配器(malloccalloc)需要知道需要多少内存。

如果您使用数组作为分配比大,你的程序可能与碰撞段错误的更好的情况。如果您非常不幸,您的程序将不会崩溃,只会在数组之后立即使用部分内存,从而产生怪异的结果。

从C99开始,如果可以从初始值设定项中推断出,则可以省略数组长度指定char w[] = "Hello";与的结果相同char w[6] = "Hello";但是,这对您没有帮助,因为您在编译时指定了初始化程序,并且需要在运行时动态更改字符串长度。

如何模拟任意长度的字符串

要处理无限长度的字符串,可以创建固定长度的数组,每次长度太短时,分配一个新数组的长度是原来的两倍,然后将原始内容复制到新数组中。(并释放旧的。)您可以用来realloc为您完成这项工作,并且在不需要移动阵列并且可以将其放置在更长的位置时,还可以获得更高的速度。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

C中的任意长度字符串

来自分类Dev

C ++中字符串的动态长度

来自分类Dev

C中的字符串长度评估

来自分类Dev

C ++数组中字符串的长度

来自分类Dev

如何读取任意长度的字符串?

来自分类Dev

C 字符串长度

来自分类Dev

C / C ++中以null终止的字符串的长度

来自分类Dev

在C中限制字符串长度的问题

来自分类Dev

c中的可变长度格式字符串

来自分类Dev

在c中获取字符串长度的问题

来自分类Dev

C中字符串文字的最大可能长度

来自分类Dev

c中的固定长度字符串数组

来自分类Dev

在C / C ++中用子字符串的任意顺序查找字符串中的子字符串

来自分类Dev

为什么需要在C中的字符串数组中声明字符串的长度?

来自分类Dev

在C中,按字符串长度对字符串数组进行排序

来自分类Dev

如何在C#中基于字符串的长度读取子字符串

来自分类Dev

字符串中字符串的固定长度

来自分类Dev

在python中任意连接字符串:

来自分类Dev

JavaScript中字符串数组的长度

来自分类Dev

Jinja /烧瓶中的字符串长度

来自分类Dev

计算字符串中图像的长度

来自分类Dev

比较字符串中单词的长度

来自分类Dev

计算bash中字符串的长度

来自分类Dev

比较字符串中单词的长度

来自分类Dev

测试文件中字符串的长度

来自分类Dev

检查html中字符串的长度

来自分类Dev

Ruby 中的字符串长度修改

来自分类Dev

计算sed中的字符串长度

来自分类Dev

C-限制字符串长度