1

我正在编写一个简单的程序,并想使用 strlen 函数来获取相关字符串的大小。

然后我想创建一个数组,例如testarray[strlen(somestring)];

但它无法编译,错误提示“错误:可变大小的对象可能未初始化”

但是,该字符串的长度不会改变,所以我想我必须以某种方式告诉我的机器。

我只能访问这些标题。

stdio.h 字符串.h

如果有人可以投下一些知识炸弹,那就太好了。:)

编辑:我错了testarray[strlen(somestring)]; 可以编译但testarray[strlen(somestring)] = {}; 不能。使用testarray[strlen(somestring)]; 如果我尝试使用它,我有垃圾。

谢谢大家,它现在正在使用 memset !

4

4 回答 4

2

你最好的选择是使用“malloc()”

char *testarray = (char *)malloc(strlen(somestring)+1);

如果您使用 C++ 编程,我鼓励您使用 vector<>。

C99 引入了“可变长度数组”,但它们不能移植到所有 C 编译器。就个人而言,我不鼓励您使用它们。

剩下的就是“malloc()”;)

而且,nhahtdh 是非常正确的,请确保您始终执行相应的“free()”。

于 2012-11-06T03:54:08.513 回答
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;
}
于 2012-11-06T04:14:34.737 回答
0

testarray[strlen(somestring)] = {};

无法进行上述初始化。因为字符串大小将动态计算(可能会有所不同)。对于静态数组初始化,我们应该提供数组的确切大小。

您可以使用“memset”初始化动态数组。

于 2012-11-06T04:32:44.820 回答
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;
}
于 2013-06-27T03:39:29.280 回答