乍一看,C 中的字符串可能不像您想要的那样灵活。
您对“char outStr[]”所做的是表明您想要一个指向 char 的指针,它可以使用数组语法进行迭代......它不会为字符创建实际存储,因为您从未提及您想要多少储藏。
在 C 中,您可以将存储与这些称为指针的特殊变量分离。想要一个可变长度字符串的例子实际上是一个很好的例子,说明为什么要这样做:我想要一个知道存储位置的实体;我想要允许我更改存储大小的方法。
因此,您准备好处理动态内存分配,包括
#include <stdlib.h>
声明一个指向字符的指针
char *cpString;
您要求分配“n”个字符
cpString=malloc(n*sizeof(char));
现在您可以strcat, printf对具有 n-1 个字符的字符串执行任何操作(因为它必须以空字符结尾)。具体来说,您现在可以使用
memset(cpString,X,n-1);
cpString[n]=0;
它创建了一个包含 n-1 个字符的 XXXX...XXX\0 字符串。
当您想更改 cpString 存储大小时,这是棘手的部分,您需要在请求新的存储分配之前释放分配的内存
if (cpString !=0)
{
free(cpString);
cpString=0;
}
cpString=malloc(n*sizeof(char));
否则,动态内存存储区域(称为“堆”)会留下一个旧 n 大小的不可回收块。
有更好的分配器,不需要 free(),但我最好让你学习和练习 malloc() free() 的用法。