C,数组,如何利用strlen

时间:2012-11-06 03:50:36

标签: c arrays memory-management

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

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

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

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

我只能访问这些标题。

stdio.h中 string.h中

如果有人能丢掉一些知识炸弹,那将会很棒。 :)

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

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

4 个答案:

答案 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;
}