char [length]初始化并处理它

时间:2012-07-24 13:48:39

标签: c c-strings

我已经定义了一个char数组:

char d[6];

如果我对以下内容有误,请纠正我:

此时没有为变量d分配内存。现在我要初始化它:

d="aaaaa";

在这种初始化之后,不需要释放内存;它将自动完成。

我如何知道char[]是否已初始化?我正在寻找像

这样的模式
if (filled(d)){..}

另外,如何用一种角色填充char []?

5 个答案:

答案 0 :(得分:6)

  

此时没有为变量d分配内存。

不正确的。这样:

char d[6];

是一个未初始化的6 char数组,并且已经为它分配了堆栈上的内存。堆栈变量不需要显式free() d,无论它们是否已初始化。堆栈变量使用的内存将在超出范围时释放。只有通过malloc()realloc()calloc()获得的指针才能传递给free()

初始化:

char d[6] = "aaaaa"; /* 5 'a's and one null terminator. */

或:

char d[] = "aaaaa"; /* The size of the array is inferred. */

而且,正如mathematician1975已经指出的那样,数组赋值是非法的:

char d[] = "aaaaa"; /* OK, initialisation. */
d = "aaaaa";        /* !OK, assignment. */
在声明或分配strcpy()之后,

strncpy()memcpy()snprintf()d等可用于复制到char d的个别元素。


  

如何知道char []已初始化?如果填充(d){..}

,我需要模式

如果数组为空终止,则可以使用strcmp()

if (0 == strcmp("aaaaaa", d))
{
    /* Filled with 'a's. */
}

或使用memcmp()如果不是空终止:

if (0 == memcmp("aaaaaa", d, 6))
{
    /* Filled with 'a's. */
}

  

如何用一种字符填充char []?

使用memset()

memset(d, 'a', sizeof(d)); /* WARNING: no null terminator. */

或:

char d[] = { 'a', 'a', 'a', 'a', 'a', 'a' }; /* Again, no null. */

答案 1 :(得分:1)

如果您执行

,您的代码将无法编译(gcc 4.6.3)
 char d[6];
 d = "aaaaa";

你需要做

 char d[6] = "aaaaa" 

以这种方式初始化它。 这是在堆栈上创建的局部变量,因此在内存问题方面,您需要担心的是不会在数组边界之外写入/读取。

答案 2 :(得分:0)

首先,每当你声明char d[6]已经分配了6个字节的内存时。

其次,除非你做malloc

,否则不需要释放你的记忆

第三,如果你想用一种角色初始化它,那么就这样做

char d[6] = "aaaaa"; 

答案 3 :(得分:0)

int d[6];

使用此声明将6个字节分配到堆栈中。它会自动释放。

答案 4 :(得分:0)

How to know was char[] initialized? I need pattern if filled(d){..}

在声明字符数组时执行此操作:

char d[6];
d[0] = 0;

然后你可以这样检查:

if(strlen(d) == 0)
//d is not initialized