char 初始化并处理它

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

char d[6]; 

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

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

 d="aaaaa"; 

在这种初始化之后,就没有必要释放内存; 它将自动完成。

我如何知道char[]已初始化? 我正在寻找像这样的模式

 if (filled(d)){..} 

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

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

不正确。 这个:

 char d[6]; 

是一个未初始化的6个字符串数组,并且已经为它分配了堆栈内存。 堆栈变量不需要显式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. */ 

而且,正如数学家 1975年所指出的,数组赋值是非法的:

 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. */ } 

或者如果没有null终止,则使用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. */ 

如果你这样做,你的代码将无法编译(gcc 4.6.3)

  char d[6]; d = "aaaaa"; 

你需要做的

  char d[6] = "aaaaa" 

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

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

其次,除非你做malloc,否则不需要释放你的记忆

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

 char d[6] = "aaaaa"; 
 int d[6]; 

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

 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