rec*_*nja 5 c string loops initialization
我是C的新手,我遇到了一些麻烦.如何在C中创建包含指定字符的可变长度字符串?这是我尝试过但我收到编译器错误:
int cLen = 8 /* Specified Length */
char chr = 'a'; /* Specified Character */
char outStr[cLen];
int tmp = 0;
while (tmp < cLen-1)
outStr[tmp++] = chr;
outStr[cLen-1] = '\0';
/* outStr = "aaaaaaaa" */
Run Code Online (Sandbox Code Playgroud)
你可以试试:
char *str = malloc(cLen + 1);
memset(str, 'a', cLen);
str[cLen] = 0;
Run Code Online (Sandbox Code Playgroud)
乍一看,C 中的字符串可能没有您想要的那么灵活。
你对 "char outStr[]" 所做的是表明你想要一个指向 char 的指针,它可以用数组语法迭代......它没有为字符创建实际存储,因为你从未提到你想要多少储藏。
在 C 中,您可以将存储与这些称为指针的特殊变量分离。想要一个可变长度字符串的例子实际上是一个很好的例子,说明你为什么想要它:我想要一个实体,它知道存储在哪里;我想要允许我更改存储大小的方法。
因此,您准备好通过包括以下内容来处理动态内存分配
#include <stdlib.h>
Run Code Online (Sandbox Code Playgroud)
声明一个指向字符的指针
char *cpString;
Run Code Online (Sandbox Code Playgroud)
您要求分配“n”个字符
cpString=malloc(n*sizeof(char));
Run Code Online (Sandbox Code Playgroud)
现在您可以strcat, printf,无论您想对具有 n-1 个字符的字符串做什么(因为它必须以空字符结尾)。具体来说,您现在可以使用
memset(cpString,X,n-1);
cpString[n]=0;
Run Code Online (Sandbox Code Playgroud)
它创建了一个 XXXX...XXX\0 字符串,包含 n-1 个字符。
当您想更改 cpString 存储大小时,这是棘手的部分,您需要在请求新的存储分配之前释放分配的内存
if (cpString !=0)
{
free(cpString);
cpString=0;
}
cpString=malloc(n*sizeof(char));
Run Code Online (Sandbox Code Playgroud)
否则,动态内存存储区域(称为“堆”)会留下一块不可回收的旧 n 大小。
有更好的分配器,不需要 free(),但我最好让你学习和练习 malloc() free() 用法。
| 归档时间: |
|
| 查看次数: |
12790 次 |
| 最近记录: |