我正在编写一个简单的程序,并希望使用strlen函数来获取相关字符串的大小。
然后我想创建一个数组,例如 testarray [strlen(somestring)];
但它无法编译,错误显示“错误:可能无法初始化可变大小的对象”。
然而,该字符串的长度不会改变所以我想我必须以某种方式告诉我的机器。
我只能访问这些标题。
stdio.h中 string.h中
如果有人能丢掉一些知识炸弹,那将会很棒。 :)编辑: 我错了 testarray [strlen(somestring)]; 可以编译,但 testarray [strlen(somestring)] = {}; 不能。使用 testarray [strlen(somestring)]; 如果我尝试使用它,我会有垃圾。
谢谢大家,现在正在使用memset!
答案 0 :(得分:2)
您最好的选择是使用“malloc()”
char *testarray = (char *)malloc(strlen(somestring)+1);
如果您使用C ++编程,我建议您使用矢量<>。
C99引入了“可变长度数组”,但它们不能移植到所有C编译器。就个人而言,我不鼓励你使用它们。
留下你的“malloc()”;)
而且,nhahtdh是对的,请确保你总是做相应的“免费()”。
答案 1 :(得分:0)
您需要将temp中的内存初始化为0.这就是原始代码中空括号{}
的作用。使用memset
memset(temp, 0, sizeof(temp));
或者for循环(因为你没有malloc / free你可能没有memset)。
int length = sizeof(temp);
int i;
for (i = 0; i < length; ++i)
{
temp[i] = 0;
}
答案 2 :(得分:0)
testarray [strlen(somestring)] = {};
以上初始化是不可能的。因为字符串大小将动态计算(可能会有所不同)。对于静态数组初始化,我们应该提供数组的确切大小。
您可以使用'memset'初始化动态数组。
答案 3 :(得分:0)
我希望这会有所帮助
#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;
}