我已经定义了一个char数组:
char d[6];
如果我对以下内容有误,请纠正我:
此时没有为变量d
分配内存。现在我要初始化它:
d="aaaaa";
在这种初始化之后,不需要释放内存;它将自动完成。
我如何知道char[]
是否已初始化?我正在寻找像
if (filled(d)){..}
另外,如何用一种角色填充char []?
答案 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