C、 数组,如何使用strlen
我正在编写一个简单的程序,希望使用strlen函数来获得所讨论字符串的大小 然后我想创建一个数组,例如testarray[strlen(somestring)]强> 但它无法编译,错误为“错误:可变大小的对象可能未初始化” 然而,这个字符串的长度不会改变,所以我想我必须告诉我的机器 我只能访问这些标题 stdio.h 字符串.h 如果有人能投下一些知识炸弹,那就太好了。:) 编辑: 我错了可以编译,但testarray[strlen(somestring)]={}不能。用testarray[strlen(somestring)]如果我尝试使用垃圾,我就有垃圾 谢谢大家,它现在正在与memset合作 最好使用“malloc()”C、 数组,如何使用strlen,c,arrays,memory-management,C,Arrays,Memory Management,我正在编写一个简单的程序,希望使用strlen函数来获得所讨论字符串的大小 然后我想创建一个数组,例如testarray[strlen(somestring)] 但它无法编译,错误为“错误:可变大小的对象可能未初始化” 然而,这个字符串的长度不会改变,所以我想我必须告诉我的机器 我只能访问这些标题 stdio.h 字符串.h 如果有人能投下一些知识炸弹,那就太好了。:) 编辑: 我错了可以编译,但testarray[strlen(somestring)]={}不能。用testarray[strl
char*testarray=(char*)malloc(strlen(somestring)+1)代码>
如果你在C++中编程,我鼓励你使用向量。< /P>
C99引入了“可变长度数组”,但它们不能移植到所有C编译器。就我个人而言,我不鼓励你使用它们
剩下的是“malloc()”;)
而且,nhahtdh是非常正确的,请确保始终执行相应的“free()”您需要将temp中的内存初始化为0。这是空括号{}
在原始代码中所做的。或者使用memset
memset(temp, 0, sizeof(temp));
或者for循环(因为没有malloc/free,所以可能没有memset)
int length=sizeof(temp);
int i;
对于(i=0;i
testarray[strlen(somestring)]={}
无法进行上述初始化。因为字符串大小将动态计算(可能会变化)。对于静态数组初始化,我们应该提供数组的确切大小
您可以使用“memset”初始化动态数组。我希望这有帮助
#include <stdio.h>
#include <string.h>
int main(int argc, const char * argv[])
{
char array[256];
printf ("Enter a sentence: ");
fgets(array, 256, stdin);
printf ("The sentence entered is %zu characters long.\n", strlen(array));
return 0;
}
#包括
#包括
int main(int argc,const char*argv[]
{
字符数组[256];
printf(“输入一个句子:”);
fgets(阵列,256,标准输入);
printf(“输入的句子长度为%zu个字符。\n”,strlen(数组));
返回0;
}
strlen
将返回从起始指针到最近字符(NUL character,0)的字符数。它不会返回缓冲区/数组的大小。事实证明,这是的副本。我认为,如果somestring
在编译时保持不变,大多数现代编译器将允许变量数组初始化。谢谢,但malloc似乎不在这两个库中。如果我像这样写char temp[strlen(str)+1];它可以编译,但里面似乎有垃圾,如果我想写chartemp[strlen(str)+1]={};我无法编译。@user1801930:malloc
在C标准库中。如果不提供,C实现就不可能完成。可以在stdlib.h
中找到它。此外,您的代码片段没有意义,这就是它无法编译的原因。你打算干什么?这些头文件不是“库”,但是如果您不能使用malloc
(确定吗?),并且您没有允许可变长度数组的C99实现,那么您需要预先分配一个最大大小的数组。此外,@palsm4,不要强制转换malloc
的返回值,即使VLA是通用的,使用它将是一个非常糟糕的主意,因为无法知道是否有足够的空间来存储大型VLA,也无法让实现报告失败。对不起,我以为它们被称为库。在C99中,可以使用可变长度数组。这些是数组类型,其大小在运行时确定。
#include <stdio.h>
#include <string.h>
int main(int argc, const char * argv[])
{
char array[256];
printf ("Enter a sentence: ");
fgets(array, 256, stdin);
printf ("The sentence entered is %zu characters long.\n", strlen(array));
return 0;
}